The attached sas program to find optimal operating point (MGYI) along with the sas format. MGYI can be found by proc means which is a single measure used to summarize the performance of c1 and c2. The attached observed sample is considered to be the population that needs resample 2000 samples with replacement and every time calculates MGYI, c1 and c2. Then perform bootstrap confidence interval on MGYI, c1 and c2.
LIBNAME FRMT 'C:\project';run;
OPTIONS FMTSEARCH=(FRMT);run;
data rocBP;
input c2 c1 y id ;
cards;
148 33.6 1 1
85 26.6 0 2
183 23.3 1 3
89 28.1 0 4
137 43.1 1 5
116 25.6 0 6
78 31 1 7
115 35.3 0 8
197 30.5 1 9
110 37.6 0 11
168 38 1 12
139 27.1 0 13
189 30.1 1 14
166 25.8 1 15
100 30 1 16
118 45.8 1 17
107 29.6 1 18
103 43.3 0 19
115 34.6 1 20
126 39.3 0 21
99 35.4 0 22
196 39.8 1 23
119 29 1 24
143 36.6 1 25
125 31.1 1 26
147 39.4 1 27
97 23.2 0 28
145 22.2 0 29
117 34.1 0 30
;
data rocBP;
set rocBP;
Sensitivity = 1-probbnrm((c1-35.4)/6.63,(c2-142.5)/29.64, 0);
FP = 1-probbnrm((c1-30.8)/6.57,(c2-110.8)/24.8, 0);
FPR=FP;
condition = ceil(FPR*200)/200 ;
Costp01 = (probnorm((c1-35.4)/6.63))* 0.1 + (probnorm((c1-30.8)/6.57))*(1-0.1) ;
run;quit;
proc sort data=rocBP; by FP;run;quit;
proc means data=rocBP max noprint;
var Sensitivity; by FP;
output out=mrocBP (drop=_type_ _freq_)
max=MTPR
maxid(Sensitivity(condition))=condition ;
format FP lessthan.;
run;quit;
/**************************************** MCMROC******************************************************************************/
******************************************BP, p=0.1, q=1 *******************************************;
proc sort data=rocBP; by condition ;run;
proc sort data=mrocBP; by condition ;run;
data mrocBPq;
merge rocBP mrocBP;
by condition;
run;
data mrocBPq1;
set mrocBPq;
TPRmaxq = 1 * MTPR ;
if Sensitivity >= TPRmaxq then q=1;
else q=0;
if q=0 then delete;
run;
proc sort data=mrocBPq1 ; by FP;run;
proc means data=mrocBPq1 min noprint;
var Costp01; by FP;
output out=mincBPq1p01 (drop=_type_ _freq_)
min=cost
minid(Costp01(c1))=c1
minid(Costp01(c2))=c2
minid(Costp01(FPR))=FPR
minid(Costp01(condition))=condition
minid(Costp01(MTPR))=MTPR
minid(Costp01(Sensitivity))=Sensitivity;
format FP lessthan.;
run;quit;
/**** Calculate optimal operating point(MGYI) *** *************************************************************************/
data Optimalq1p01a10;
set mincBPq1p01;
GYI = Sensitivity + ((1-0.1)/(10*0.1)) * (1- FPR);
run;
data costq1p01a10;
set Optimalq1p01a10;
run;
proc means data=costq1p01a10 max noprint;
var GYI;
output out=MGYIcq1p01a10 (drop=_type_ _freq_)
maxid(GYI(c1))=c1
maxid(GYI(c2))=c2
max=MGYI ;
run;
proc print data = MGYIcq1p01a10; run;