投稿问答最小化  关闭

万维书刊APP下载

R语言:ROC曲线怎么画?

2022/11/30 13:45:26  阅读:1144 发布者:

利用pROC包绘制ROC曲线

1 写在前面

需要的包为"pROC""ggplot2"。如果没有,请安装。

使用自带的aSAH数据库,数据库:This dataset summarizes several clinical and one laboratory variable of 113 patients with an aneurysmal subarachnoid hemorrhage.

pROC包中的缩写:

ROC: receiver operating characteristic

AUC: area under the ROC curve

pAUC: partial AUC

CI: confidence interval

SP: specificity

SE: sensitivity

2 安装拓展包

install.packages("pROC")     # 下载 pROC

install.packages("ggplot2")  # 下载 ggplot2

3 调用拓展包

library(pROC)      # 加载pROC

library(ggplot2)  # 调用ggplot2包以利用ggroc函数

4 导入数据

data(aSAH)   # 加载数据集

head(aSAH)   # 查看数据集前6

5 建立曲线

roc1 <- roc(aSAH$outcome,aSAH$s100b);roc1  # Build a ROC object and compute the AUC

roc2 <- roc(aSAH$outcome, aSAH$ndka);roc2  # Create a few more curves for the next examples

# smooth=TRUE 绘制光滑曲线,默认为F,可省略

6 统计分析

6.1 分别计算roc1roc2AUROC95%CI

auc(roc1);ci(roc1)

auc(roc2);ci(roc2)

6.2 比较两条ROC曲线是否有差异

roc.test(roc1,roc2,method = "delong") # 其他两种方法 “bootstrap”或“venkatraman

6.3 计算partial AUC

plot(roc1,

     print.auc=TRUE,print.auc.x=0.5,print.auc.y=0.5,  # 图像上输出AUC,坐标为(xy

     auc.polygon=TRUE, auc.polygon.col="skyblue",  # 设置ROC曲线下填充色

     max.auc.polygon=TRUE,   # 填充整个图像

     partial.auc=c(1, 0.8), partial.auc.focus="sp",  # sp改为se试试

     grid=c(0.1, 0.2),grid.col=c("green", "red"), # 设置间距为0.10.2,线条颜色

     print.thres=TRUE,   # 图像上输出最佳截断值

     reuse.auc=F)

其余计算方法参考pROC

7 绘制图形

7.1  plot函数绘制单条ROC曲线

plot(roc1, # roc1换为roc2,更改参数可绘制roc2曲线

     print.auc=TRUE,print.auc.x=0.5,print.auc.y=0.5, # 图像上输出AUC,坐标为(xy

     auc.polygon=TRUE, auc.polygon.col="skyblue", # 设置ROC曲线下填充色

     max.auc.polygon=TRUE, # 填充整个图像

     grid=c(0.1,0.2), grid.col=c("green", "red"), # 设置间距为0.10.2,线条颜色

     print.thres=TRUE, print.thres.cex=0.8,  # 图像上输出最佳截断值,字体缩放0.8

     legacy.axes=TRUE)  # 使横轴从01,表示为1-特异度

7.2  plot函数绘制多条曲线

plot(roc1,

     print.auc=TRUE, print.auc.x=0.4, print.auc.y=0.5,

     # 图像上输出AUC,坐标为(xy

     auc.polygon=TRUE, auc.polygon.col="#fff7f7", # 设置ROC曲线下填充色

     max.auc.polygon=FALSE,  # 填充整个图像

     grid=c(0.5, 0.2), grid.col=c("black", "black"),  # 设置间距为0.10.2,线条颜色

     print.thres=TRUE, print.thres.cex=0.9, # 图像上输出最佳截断值,字体缩放倍数

     smooth=F, # 绘制不平滑曲线

     main="Comparison of two ROC curves", # 添加标题

     col="#FF2E63",  # 曲线颜色

     legacy.axes=TRUE)   # 使横轴从01,表示为1-特异度

添加roc2曲线

plot.roc(roc2,

         add=T,  # 增加曲线

         col="#252A34", # 曲线颜色为红色

         print.thres=TRUE, print.thres.cex=0.9,  # 图像上输出最佳截断值,字体缩放倍数

         print.auc=TRUE, print.auc.x=0.4,print.auc.y=0.4,

         # 图像上输出AUC,坐标为(xy

         smooth = F)  # 绘制不平滑曲线

比较两组曲线有无统计学差异

testobj <- roc.test(roc1,roc2)   # 检验两条曲线

text(0.8, 0.2, labels=paste("P value =", format.pval(testobj$p.value)), adj=c(0, .5)) # 在图上添加P

legend(0.35,0.30,  # 图例位置

       bty = "n",  # 图例样式,默认为 "o"

       title="",   # 引号内添加图例标题

       legend=c("roc1","roc2"),  # 添加分组

       col=c("#FF2E63","#252A34"),  # 颜色跟前面一致

       lwd=2)  # 线条粗细

添加图例和P

7.3 ggroc函数绘制多条曲线

roc.list <- roc(outcome ~ wfns + s100b + ndka, data = aSAH)

ggroc1 <- ggroc(roc.list,

                legacy.axes = TRUE); ggroc1

ggroc1 + xlab("1-specificity") + ylab("Sensitivity") +

  theme_minimal() + ggtitle("My ROC curve") +

  geom_segment(aes(x = 0,xend = 1,y = 0,yend = 1),col = "darkgrey",linetype = "dashed")

ggplot2包绘制图形就是要好看很多,但是还没学全,先将就着看吧

pROC是目前功能比较全面的ROC曲线专业绘制函数,具体参数设置参考pROC包。

End

来源:刘老师医学统计

转自:“斐然智达SCI学术服务”微信公众号

如有侵权,请联系本站删除!


  • 万维QQ投稿交流群    招募志愿者

    版权所有 Copyright@2009-2015豫ICP证合字09037080号

     纯自助论文投稿平台    E-mail:eshukan@163.com