公卫人

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8010|回复: 4

[分享] ROC曲线绘制及截断值判断的SAS实现

[复制链接]
夏鹏飞 发表于 2017-4-15 13:42:41 | 显示全部楼层 |阅读模式

注册后推荐绑定QQ,之后方才可以使用下方的“用QQ帐号登录”。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 夏鹏飞 于 2017-4-18 14:31 编辑

帮女朋友@mmyrt 做的分子生物学检验课后作业题。其他同学都是用SPSS还有EXCEL做的,网上搜也都是推荐SPSS。这里我想试着用SAS实现一下。

题目见附图。

大三狗还没有学流行病学,午饭回来瞟了一眼《筛检》,大致了解了一下原理,其实和统计里面的一类错误&二类错误差不多。再看了一下SAS官网的手册,依葫芦画瓢写了一个图。下午在图书馆找到了冯国双老师的书@glxfgsh ,又实现了截断值的输出(即约登指数最大的点)。

——————————————【解答】——————————————

根据题中数据,可知MCV为连续性变量,骨髓诊断贫血结果为二分类变量。由于正常组MCV值较高,故将其骨髓诊断结果赋值为1,异常组赋值为0。在SAS中以data步输入数据,通过logistic过程建立因变量骨髓诊断结果与自变量MCV的关系模型,选项plots(only)=roc(id=obs)实现ROC曲线输出。重复此过程步,不输出结果,导出为新数据集roc,手动输入公式计算灵敏度、特异度与约登指数等值,并与原数据合并后,按约登指数降序排列。第一行即为最佳临界点(截断点)。

代码如下

  1. data ida;
  2. input mcv bmd @@;
  3. cards;
  4. 60 1 66 1 68 1 69 1 71 1 71 1 73 1 74 1 74 1 74 1 76 1 77 1 77 1 77 1 77 1 78 1 78 1
  5. 79 1 79 1 80 1 80 1 81 1 81 1 81 1 82 1 82 1 83 1 83 1 83 1 83 1 83 1 83 1 83 1 84 1
  6. 84 1 84 1 84 1 85 1 85 1 86 1 86 1 86 1 87 1 88 1 88 1 88 1 89 1 89 1 89 1 90 1 90 1
  7. 91 1 91 1 92 1 93 1 93 1 93 1 94 1 94 1 94 1 94 1 96 1 97 1 98 1 100 1 103 1
  8. 52 0 58 0 62 0 65 0 67 0 68 0 69 0 71 0 72 0 72 0 73 0 73 0 74 0 75 0 76 0 77 0 77 0
  9. 78 0 79 0 80 0 80 0 81 0 81 0 81 0 82 0 83 0 84 0 85 0 85 0 86 0 88 0 88 0 90 0 92 0
  10. ;
  11. run;
  12. ods graphics on;
  13. proc logistic data=ida plots(only)=roc(id=obs);
  14. model bmd(event="0")=mcv / scale=none clparm=wald clodds=pl rsquare;
  15. effectplot;
  16. run;
  17. ods graphics off;
  18. /*Example 51.7 ROC Curve, Customized Odds Ratios, Goodness-of-Fit Statistics, R-Square, and Confidence Limits*/
  19. /*https://support.sas.com/documentation/cdl/en/statug/63347/HTML/default/viewer.htm#statug_logistic_sect065.htm*/
  20. proc sort nodupkey data=ida out=nd;
  21. by descending mcv;
  22. run;
  23. proc logistic desc data=ida noprint;
  24. model bmd=mcv / outroc=roc ctable;
  25. run;
  26. data roc (rename=(_sensit_=sensitivity));
  27. set roc;
  28. specifity=1-_1mspec_;
  29. _msens_=1-_sensit_;
  30. youden=_sensit_+specifity-1;
  31. run;
  32. data cutoff (drop=_prob_ _pos_ _neg_ _falpos_ _falneg_);
  33. merge nd roc;
  34. proc sort;
  35. by descending youden;
  36. options nodate obs=1;
  37. proc print data=cutoff label;
  38. label mcv="红细胞平均容积" bmd="骨髓诊断" sensitivity="灵敏度" _msens_="假阴性率(1-灵敏度)" specifity="特异度"  _1mspec_="假阳性率(1-特异度)" youden="约登指数(灵敏度+特异度)";
  39. run;
  40. /*冯国双, 刘德平. 医学研究中的logistic回归分析及SAS实现[M]. 北京大学医学出版社, 2015, 81-96.*/
  41. /*第七章 诊断试验中的logistic回归*/
复制代码

分子生物学标志物 徐顺清老师

分子生物学标志物 徐顺清老师

ROC曲线与截断值_夏鹏飞_2017.4.18.pdf

186.17 KB, 下载次数: 39, 下载积分: 钢镚 -1 分

结果输出

评分

参与人数 1钢镚 +100 收起 理由
epiman + 100 积极发布原创帖子内容,再接再厉!

查看全部评分

本帖被以下淘专辑推荐:

epiman 发表于 2017-4-15 20:53:41 | 显示全部楼层
ROC曲线实现其实Stata非常简单,当然了MedCalc也非常简单,也是其特色之一。
回复

使用道具 举报

 楼主| 夏鹏飞 发表于 2017-4-15 23:18:12 | 显示全部楼层
epiman 发表于 2017-4-15 20:53
ROC曲线实现其实Stata非常简单,当然了MedCalc也非常简单,也是其特色之一。

貌似SPSS也很简单,其实如果只要花ROC曲线的话,SAS在data步导入数据后,也只需要用到一个proc logistic语句就行了。SAS主要的不足是不方便找截断点。但是冯老师的书里面提供了一种自己用公式写的办法。也不是很难,可以完全独立在SAS中实现。

点评

我的意思是简单的令人发指:)  发表于 2017-4-16 15:30
回复

使用道具 举报

lanlo 发表于 2020-5-15 12:17:00 | 显示全部楼层
您好,将源数据集查重后输出的观测值与ROC的观测值数量不一致,怎么能合并呢??我不太明白您讲原数据集和ROC数据集合并的思路

补充内容 (2020-5-29 15:24):
您好,撤回上一个问题,我按照您的方法将原数据集除重后做logistic,并与输出的唯一值nd合并,计算最大约登指数对应的cutoff值,但是和我用medcalc算出来的cutoff值并不一致,这两个数据集合并仅仅按照研究因素的

补充内容 (2020-5-29 15:25):
仅仅按照研究因素的降序进行合并,是否合理呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

充值|至尊会员|接种|公卫人 ( 沪ICP备06060850号-3 )

GMT+8, 2020-5-31 14:43 , Processed in 0.117451 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表