SAS(9.4)数据集(d)包括3个变量: Y, 标记(= 0和1)和 组(= 1和2)。 如何在相同的情节下制作两个ROC曲线?我在互联网上看了很多,但不幸的是,他不明白这个解释。我非常感谢你的帮助!那么,如何在这里放一个组变量? (P.S.并且还有置信区间的AUC。)
ods graphics on;
proc logistic data = d plots = EFFECT plots = ROC;
模型标记(事件='1')= Y;
运行;
ods graphics off;
P.S。现在我将添加一个样本。
Y - 这是人的体重
组(= 1和2),其中1是男性,2 - 女性
标记(= 0和1)其中1表示重量是盈余,0表示重量是正常的。
我需要在同一个地块上获得两条ROC曲线(男性和女性)以进行比较。
答案 0 :(得分:0)
请参阅ROC语句和ROCCONTRAST语句。 SAS docs中的好例子。
您没有提供样本数据,但我相信您会想要这样的内容:
proc logistic data=d plots=EFFECT plots=ROC /nofit;
model marker (event='1') = Y Group;
roc 'Y' Y;
roc 'Group' Group;
roccontrast reference('Group') / estimate e;
run;
答案 1 :(得分:0)
您有两个独立样本(男性和女性),并希望比较每个样本计算的ROC曲线。据我所知http://support.sas.com/kb/45/339.html,SAS无法在一个PROC步骤中比较独立样本的ROC曲线。你必须自己做这项工作。
过程是:
以下是我的一个例子。我不承诺这是正确的,但这是我对支持说明中的信息的理解。请阅读支持说明。
示例数据。我仍然不明白你的数据,所以我做了一些我明白的。 5名女性和6名男性的数据。每个人在某些诊断测试和疾病状态(1/0)上都有得分。
data have;
input Sex $1. Test Disease;
cards;
F 10 0
F 20 0
F 30 1
F 40 0
F 50 1
M 10 0
M 20 1
M 30 0
M 40 1
M 50 1
M 60 1
;
run;
运行PROC logistic,并输出统计信息。我使用了一个BY语句,而不是为男性和女性运行单独的PROC步骤。
ods output ROCassociation=AUCs(where=(ROCmodel="Test"));
proc logistic data=have plots(only)=roc;
model Disease(event='1') = Test
/outroc=RocStats(where=(_source_="Test"))
;
roc 'Test' Test;
by Sex;
run;
ods output close;
使用SGPLOT绘制重叠的ROC曲线。我使用的是9.3所以需要使用ODS图形语句来强制方形图。 9.4为SGPLOT引入了aspect = 1选项。这是一个直截了当的情节,让我想起我有多喜欢SGPLOT和GTL。我认为我永远不会回到GPLOT。
ods graphics / height=480px width=480px;
proc sgplot data=RocStats;
xaxis values=(0 to 1 by 0.25) grid offsetmin=.05 offsetmax=.05;
yaxis values=(0 to 1 by 0.25) grid offsetmin=.05 offsetmax=.05;
lineparm x=0 y=0 slope=1 / transparency=.7;
series x=_1mspec_ y=_sensit_ / group=Sex;
run;
计算测试统计信息。支持说明这是一个大样本测试。检验统计量遵循1自由度的卡方分布。
data AUCtest(keep=AreaMale StdErrMale AreaFemale StdErrFemale ChiSq Prob);
set AUCs (keep=Sex Area StdErr
where=(Sex='M')
rename=(Area=AreaMale StdErr=StdErrMale)
)
;
set AUCs (keep=Sex Area StdErr
where=(Sex='F')
rename=(Area=AreaFemale StdErr=StdErrFemale)
)
;
ChiSq=(AreaMale-AreaFemale)**2/(StdErrMale**2 + StdErrFemale**2);
Prob=1-probChi(ChiSq,1);
format Prob pvalue6.;
run;
同样,不要将任何这些视为真理。使用风险自负,我也处于学习阶段。