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曲线。你必须自己完成这项工作。

过程是:

  1. 运行 PROC LOGISTIC 用于计算每个样本的 ROC 统计数据(sensitivity/specificity 在每个切点)和具有标准误差的 AUC。
  2. 构建 ROC 统计图,叠加两条曲线。
  3. 根据 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;

再次强调,不要把这些当成事实。使用风险自负,我也在学习阶段。