Oil Wildcatter's Problem in Risk Averse Setting
/**************************************************************/
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: DTREEE02 */
/* TITLE: Oil Wildcatter's Problem in Risk Averse Setting */
/* (dtreee02) */
/* PRODUCT: OR */
/* SYSTEM: ALL */
/* KEYS: DTREE */
/* PROCS: DTREE, PRINT, FORMAT, GPLOT */
/* DATA: */
/* */
/* SUPPORT: UPDATE: */
/* REF: Example 2 from the DTREE chapter */
/* MISC: */
/* */
/**************************************************************/
goptions hpos=80 vpos=32;
/* -- create the STAGEIN= data set -- */
data Dtoils4;
format _STNAME_ $12. _OUTCOM_ $15. _SUCCES_ $12.;
input _STNAME_ $ _STTYPE_ $ _OUTCOM_ $
_SUCCES_ $ ;
datalines;
Divestment Decision No_Divestment Insurance
. . 10%_Divestment Insurance
. . 20%_Divestment Insurance
. . 30%_Divestment Insurance
. . 40%_Divestment Insurance
. . 50%_Divestment Insurance
. . 60%_Divestment Insurance
. . 70%_Divestment Insurance
. . 80%_Divestment Insurance
. . 90%_Divestment Insurance
. . 100%_Divestment .
Insurance Decision Buy_Insurance Cost
. . Do_Not_Buy Cost
Cost Chance Low Oil_Deposit
. . Fair Oil_Deposit
. . High Oil_Deposit
Oil_Deposit Chance Dry .
. . Wet .
. . Soaking .
;
/* -- create the PROBIN= data set -- */
data Dtoilp4;
input _EVENT1 $ _PROB1 _EVENT3 $ _PROB3 ;
datalines;
Low 0.2 Dry 0.5
Fair 0.6 Wet 0.3
High 0.2 Soaking 0.2
;
/* -- create the PAYOFFS= data set -- */
data Dtoilu4(drop=i j k l);
length _STATE1-_STATE4 $16. ;
format _VALUE_ dollar12.0;
/* define and initialize arrays */
array DIVEST{11} $16. _TEMPORARY_ ('No_Divestment',
'10%_Divestment',
'20%_Divestment',
'30%_Divestment',
'40%_Divestment',
'50%_Divestment',
'60%_Divestment',
'70%_Divestment',
'80%_Divestment',
'90%_Divestment',
'100%_Divestment' );
array INSUR{3} $16. _TEMPORARY_ ('Do_Not_Buy',
'Buy_Insurance',
' ' );
array COST{4} $ _TEMPORARY_ ('Low',
'Fair',
'High',
' ' );
array DEPOSIT{4} $ _TEMPORARY_ ('Dry',
'Wet',
'Soaking',
' ' );
do i=1 to 10; /* loop for each divestment */
_STATE1=DIVEST{i};
/*
* determine the percentage of ownership retained
* for this scenario
*/
PCT=1.0-((i-1)*0.1);
do j=1 to 2; /* loop for insurance decision */
_STATE2=INSUR{j};
/*
* determine the premium need to pay for this
* scenario
*/
if _STATE2='Buy_Insurance' then PREMIUM=130000;
else PREMIUM=0;
do k=1 to 3; /* loop for each well cost */
_STATE3=COST{k};
/* determine the cost for this scenario */
if _STATE3='Low' then _COST_=150000;
else if _STATE3='Fair' then _COST_=300000;
else _COST_=500000;
do l=1 to 3; /* loop for each deposit type */
_STATE4=DEPOSIT{l};
/*
* determine the oil deposit and the
* corresponding net payoff for this scenario
*/
if _STATE4='Dry' then _PAYOFF_=0;
else if _STATE4='Wet' then _PAYOFF_=700000;
else _PAYOFF_=1200000;
/* determine redeem received for this scenario */
if _STATE2='Buy_Insurance' and _STATE4='Dry' then
REDEEM=200000;
else REDEEM=0;
/* calculate the net return for this scenario */
_VALUE_=(_PAYOFF_-_COST_-PREMIUM+REDEEM)*PCT;
/* drop unneeded variables */
drop _COST_ _PAYOFF_ PREMIUM REDEEM PCT;
/* output this record */
output;
end;
end;
end;
end;
/* output an observation for the scenario 100%_Divestment */
_STATE1=DIVEST{11};
_STATE2=INSUR{3};
_STATE3=COST{4};
_STATE4=DEPOSIT{4};
_VALUE_=0;
output;
run;
/* -- print the payoff table -- */
title "Oil Wildcatter's Problem";
title3 "The Payoffs";
proc print data=Dtoilu4;
run;
/* -- PROC DTREE statements -- */
title "Oil Wildcatter's Problem";
proc dtree stagein=Dtoils4
probin=Dtoilp4
payoffs=Dtoilu4
criterion=maxce rt=1200000
nowarning;
evaluate;
summary / target=Divestment;
summary / target=Insurance;
quit;
/* create a data set for the return corresponds to each */
/* divestment possibilities and the insurance options */
data Data2g;
input INSURE DIVEST VALUE;
datalines;
1 0 45728
0 0 44499
1 10 46552
0 10 48021
1 20 46257
0 20 49907
1 30 44812
0 30 50104
1 40 42186
0 40 48558
1 50 38350
0 50 45219
1 60 33273
0 60 40036
1 70 26927
0 70 32965
1 80 19284
0 80 23961
1 90 10317
0 90 12985
1 100 0
0 100 0
;
/* -- define a format for INSURE variable -- */
proc format;
value sample 0='Do_Not_Buy' 1='Buy_Insurance';
run;
/* -- define title -- */
title h=3 "Oil Wildcatter's Problem";
/* define legend -- */
legend1 frame cframe=white label=none
cborder=black position=center ;
/* define symbol characteristics of the data points */
/* and the interpolation line for returns vs divestment */
/* when INSURE=0 */
symbol1 c=cyan i=join v=dot l=1 h=1;
/* define symbol characteristics of the data points */
/* and the interpolation line for returns vs divestment */
/* when INSURE=1 */
symbol2 c=green i=join v=square l=2 h=1;
/* -- define axis characteristics -- */
axis1 minor=none label=('Divestment (in percentage)');
axis2 minor=none label=(angle=90 rotate=0 'Certainty Equivalent');
/* set graphics options */
goptions htext=1.5;
/* plot VALUE vs DIVEST using INSURE as third variable */
proc gplot data=Data2g ;
plot VALUE*DIVEST=INSURE / haxis=axis1
vaxis=axis2
legend=legend1
name="dt2"
frame
cframe=white ;
format INSURE SAMPLE.;
run;
quit;