SAS。如何在相同的情节下制作两个ROC曲线(两个对照组)?

时间:2016-03-28 11:42:15

标签: sas roc

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曲线(男性和女性)以进行比较。

2 个答案:

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

过程是:

  1. 运行PROC LOGISTIC以计算每个样本的ROC统计数据(每个切割点的灵敏度/特异性)和标准误差的AUC。
  2. 构建ROC统计图,覆盖两条曲线。
  3. 计算AUC的检验统计量和p值。
  4. 以下是我的一个例子。我不承诺这是正确的,但这是我对支持说明中的信息的理解。请阅读支持说明。

    示例数据。我仍然不明白你的数据,所以我做了一些我明白的。 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;
    

    同样,不要将任何这些视为真理。使用风险自负,我也处于学习阶段。