楼主: shaobl
17331 24

[程序分享] 用SAS也能给你的ROC曲线添加切值点以及敏感度、特异度 [推广有奖]

  • 0关注
  • 1粉丝

本科生

11%

还不是VIP/贵宾

-

威望
0
论坛币
92 个
通用积分
7.5822
学术水平
9 点
热心指数
9 点
信用等级
0 点
经验
941 点
帖子
30
精华
0
在线时间
119 小时
注册时间
2016-10-26
最后登录
2023-2-24

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
很多人在用SAS做ROC曲线时肯定很苦恼做出来的图没有直接给出切点值而只给出了AUC值,进而每每到要做ROC曲线时都是将数据导出,用R来进行作图。

但是其实通过SAS的宏程序,我们可以轻松的做出你想要的ROC曲线图,而且功能十分丰富。

宏程序SAS官网有提供下载→http://support.sas.com/kb/25/018.html#req

有一定英语基础的朋友可以阅读其Result页面的例子介绍,看完介绍后你也基本上就能搞懂大部分的功能了。

接下来我们就直入正题,如何作图:
我们先来看下效果图:
第一张为SAS默认样式,后两张为利用宏程序画出的ROC曲线 ROC plot


首先我们需要将宏文件下载,保存为rocplot.sas文件。

然后在SAS中调用该宏
  1. %inc 'C:\SAS\Marco\rocplot.sas';*import the macro, 引号内的为宏文件的路径;
复制代码
然后运行我们的Logistic过程步
  1. proc logistic data=dateset des;*dataset为你的数据集名称;
  2. model Y=x/ outroc=roc1 roceps=0;*绘制ROC曲线所需的数据集为roc1;
  3. output out=out p=phat;*每个观测值x的预测概率输出到out数据集,并重命名为phat;
  4. run;
复制代码
接着就可以运行宏了
  1. title "ROC plot for ";
  2. title2 ""
  3.       %rocplot( inroc = roc1,inpred = out, p = phat,
  4.                      id = x _sens_ _spec_,
  5.                      optcrit=correct youden ,  x=x)
  6. /*inroc=绘制ROC曲线所需的数据集*/
  7. /*inpred=观测值预测概率值数据集*/
  8. /*p=预测概率值变量名*/
  9. /*id=ROC曲线上切点显示的标签(此处显示x实际值、灵敏度、特异度、正确率、Youden指数)*/
  10. /*optcrit=最佳切断点选择标准(此处为正确率、Youden指数)*/
  11. /*x=切点选择对应的变量*/
复制代码
你的SAS版本如果是9.2,这时候会报错,ROC曲线无法作图。查看SAS官网的文档我们也发现该宏只支持9.3及以上版本,那是不是用9.2的小伙伴就没办法用了呢。

幸运的是,通过SAS的提示发现是lineparm这个语句9.2不识别,通过series语句替代后,在9.2上成功运行。

相应版本的宏文件请见附件,下载后将文件名改为rocplot.sas或者修改导入宏步骤的路径名为现文件名即可。

相应的SAS官网的宏程序介绍我也以word文档的形式上传了附件,文末还有修改语句以适配9.2版本的过程,感兴趣的朋友可以阅读。
Marco.rar (17.71 KB) 本附件包括:
  • rocplot (for version 9.2).sas
  • rocplot (for version 9.3 or above).sas
Document for rocplot.docx (36.77 KB)
希望这个宏程序的分享能够帮助到你,让你在使用SAS的过程中能更高效,如果你有什么好的宏程序也可以分享出来,大家互相学习:P

P.S.
大家在SAS作图的时候应该有一个共同的感受就是SAS默认的图片像素很低,这是因为程序默认输出的分辨率较低造成的。

可以通过语句重新定义图片的像素,一般设置为300dpi就ok了。

该语句同样可以修改图片的尺寸,解决了小图文字不可读的问题。/height=2in 设置为2in正好可以在word中并排放两张图。

具体可以参见→https://blogs.sas.com/content/graphicallyspeaking/2012/03/22/high-quality-graphs/
  1. %let gpath='D:\SAS Graph';*定义路径;
  2. ods listing image_dpi=300 gpath=&gpath;*;
  3. ods graphics /height=2in;*设置图片分辨率 DPI=300 及路径。/height=设置图片尺寸 保证文字的可读性;
复制代码


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


ROCCurve1.png (64.91 KB)

SAS默认样式

SAS默认样式

ROCCurve5.png (38.96 KB)

默认样式

默认样式

Document for rocplot.docx

36.3 KB

unrevised version

已有 1 人评分经验 论坛币 学术水平 热心指数 收起 理由
whymath + 60 + 60 + 5 + 5 精彩帖子

总评分: 经验 + 60  论坛币 + 60  学术水平 + 5  热心指数 + 5   查看全部评分

沙发
shaobl 发表于 2018-4-11 16:37:21 |只看作者 |坛友微信交流群
:)...

使用道具

藤椅
nkunku 发表于 2018-4-12 04:24:22 |只看作者 |坛友微信交流群
谢谢。虽然不懂。

使用道具

板凳
Bugjay 发表于 2018-11-23 17:52:59 |只看作者 |坛友微信交流群
最后一段的x,x=x是用指标替换吗?

使用道具

报纸
shaobl 发表于 2018-11-23 18:10:15 |只看作者 |坛友微信交流群
Bugjay 发表于 2018-11-23 17:52
最后一段的x,x=x是用指标替换吗?
是的

使用道具

地板
Bugjay 发表于 2018-11-27 15:11:30 |只看作者 |坛友微信交流群
跑通了,感谢

使用道具

7
付齐齐88 发表于 2018-11-28 13:21:40 |只看作者 |坛友微信交流群
亲,有没有试过 如果要改变SAS输出图片的dpi 下面 这段语句要放在哪里 急求 马上要英文文章 ,然后发现像素不满足要求 有没有完整的程序 跪谢
%let gpath='D:\SAS Graph';*定义路径;
ods listing image_dpi=300 gpath=&gpath;*;
ods graphics /height=2in;*设置图片分辨率 DPI=300 及路径。/height=设置图片尺寸 保证文字的可读性;

使用道具

8
付齐齐88 发表于 2018-11-28 14:51:16 |只看作者 |坛友微信交流群
哈哈哈自己摸索出来了 附上程序 仅供参考
%include  "G:\rocplot.sas";
data fqq.girl;
set fqq.pbf_roc2;
proc logistic data=fqq.girl;
ods listing gpath="g:\结果" style=journal image_dpi=300; /*journal 为灰度 dpi为分辨率 gpath="g:\结果"为图片在自己电脑保存的地址*/
ods graphics/reset
imagename="rocgirl" /*保存图片的名字*/
outputfmt=tiff;/*图片的保持格式 许多英文杂志要求为tiff 或eps 但sas好像不支持eps 跑了几遍都没成功*/
title "ROC Curve for girl";/*图片的标题*/
model CVDs(event="1")=pbf/outroc=fqq.rocg roceps=0;
output out=outp p=phat;
run;
%rocplot(inroc=fqq.rocg,inpred=outp,p=phat,id=pbf _cutpt_  _opty_,optcrit= youden,  x=pbf);
已有 1 人评分经验 收起 理由
eijuhz + 20 鼓励积极发帖讨论

总评分: 经验 + 20   查看全部评分

使用道具

9
噜噜啊噜噜 学生认证  发表于 2019-1-9 21:21:35 |只看作者 |坛友微信交流群
您好,我也用这个宏跑出了我想要的ROC曲线,但是我还是有个问题想请教一下,您前面给的效果图的第二幅和第三幅里,每个点那里有三个数字,这三个数字分别指的是什么值??我只知道第一个值是自变量X的取值,那后面两个是什么值?求解,感谢!

使用道具

10
shaobl 发表于 2019-3-19 12:31:59 |只看作者 |坛友微信交流群
噜噜啊噜噜 发表于 2019-1-9 21:21
您好,我也用这个宏跑出了我想要的ROC曲线,但是我还是有个问题想请教一下,您前面给的效果图的第二幅和第三 ...
你好,好久没上论坛了。

图上的三个数字分别代表的是:切点值、灵敏度和特异度,即语句中id选项的内容。
  1. /*id=ROC曲线上切点显示的标签(此处显示x实际值、灵敏度、特异度、正确率、Youden指数)*/
复制代码


使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-10 22:44