SAS。如何在同一个地块上制作两条 ROC 曲线(两个比较组的)?
SAS. How to make two ROC-curve (of two comparison groups) ON THE SAME plot?
SAS (9.4) 数据集 (d) 包括 3 个变量:
是,
标记(=0 和 1)和
组(=1 和 2)。
如何在同一个地块上制作两条 ROC 曲线?我在网上看了很多,但不幸的是,我不明白其中的解释。我将非常感谢您的帮助!那么,如何在这里放置一个组变量呢? (P.S。还可以得到带置信区间的 AUC。)
ods 图形开启;
proc 逻辑数据=d 图=EFFECT 图=ROC;
模型标记(事件='1')= Y;
运行;
ods 图形关闭;
P.S。现在我将添加一个示例。
Y – 人的体重
组(=1 和 2),其中 1 是男性,2 – 女性
标记(=0 和 1),其中 1 表示重量过剩,0 表示重量正常。
我需要在同一个地块上获得两条 ROC 曲线(男性和女性),以便比较它们。
查看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;
您有两个独立样本(男性和女性),并且想要比较从每个样本计算出的 ROC 曲线。据我了解 http://support.sas.com/kb/45/339.html ,SAS无法在一个PROC步骤中比较来自独立样本的ROC曲线。你必须自己完成这项工作。
过程是:
- 运行 PROC LOGISTIC 用于计算每个样本的 ROC 统计数据(sensitivity/specificity 在每个切点)和具有标准误差的 AUC。
- 构建 ROC 统计图,叠加两条曲线。
- 根据 AUC 计算检验统计量和 p 值。
下面是我尝试的一个例子。我不保证这是正确的,但这是我对支持说明中信息的理解的实现。请阅读支持说明。
示例数据。我还是不明白你的数据,所以我做了一些我理解的。 5 名女性和 6 名男性的数据。每个人都有一些诊断测试的分数和疾病状态 (1/0)。
data have;
input Sex . 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 逻辑,并输出统计信息。对于男性和女性,我使用了 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;
再次强调,不要把这些当成事实。使用风险自负,我也在学习阶段。
SAS (9.4) 数据集 (d) 包括 3 个变量: 是, 标记(=0 和 1)和 组(=1 和 2)。 如何在同一个地块上制作两条 ROC 曲线?我在网上看了很多,但不幸的是,我不明白其中的解释。我将非常感谢您的帮助!那么,如何在这里放置一个组变量呢? (P.S。还可以得到带置信区间的 AUC。)
ods 图形开启;
proc 逻辑数据=d 图=EFFECT 图=ROC;
模型标记(事件='1')= Y;
运行;
ods 图形关闭;
P.S。现在我将添加一个示例。
Y – 人的体重
组(=1 和 2),其中 1 是男性,2 – 女性
标记(=0 和 1),其中 1 表示重量过剩,0 表示重量正常。
我需要在同一个地块上获得两条 ROC 曲线(男性和女性),以便比较它们。
查看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;
您有两个独立样本(男性和女性),并且想要比较从每个样本计算出的 ROC 曲线。据我了解 http://support.sas.com/kb/45/339.html ,SAS无法在一个PROC步骤中比较来自独立样本的ROC曲线。你必须自己完成这项工作。
过程是:
- 运行 PROC LOGISTIC 用于计算每个样本的 ROC 统计数据(sensitivity/specificity 在每个切点)和具有标准误差的 AUC。
- 构建 ROC 统计图,叠加两条曲线。
- 根据 AUC 计算检验统计量和 p 值。
下面是我尝试的一个例子。我不保证这是正确的,但这是我对支持说明中信息的理解的实现。请阅读支持说明。
示例数据。我还是不明白你的数据,所以我做了一些我理解的。 5 名女性和 6 名男性的数据。每个人都有一些诊断测试的分数和疾病状态 (1/0)。
data have;
input Sex . 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 逻辑,并输出统计信息。对于男性和女性,我使用了 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;
再次强调,不要把这些当成事实。使用风险自负,我也在学习阶段。