ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

R- ROC曲线

2022-04-08 07:00:55  阅读:332  来源: 互联网

标签:曲线 ROC library ggplot2 install Rcpp packages pROC


R 语言绘制ROC 曲线代码。

 

  1 # install.packages("pROC")     # 下载 pROC 包
  2 # install.packages("ggplot2")  # 下载 ggplot2 包
  3 # install.packages("Rcpp")
  4 
  5 
  6 library(pROC)      # 加载pROC包
  7 library(ggplot2)  # 调用ggplot2包以利用ggroc函数
  8 library(Rcpp)      # 加载Rcpp包
  9 
 10 # dev.new()
 11 data(aSAH)   # 加载数据集
 12 head(aSAH)   # 查看数据集前6行
 13 roc1 <- roc(aSAH$outcome,aSAH$s100b,
 14             percent=T,  #设置ROC曲线显示为百分比形式
 15             # # arguments for auc   绘制置信区域
 16             # partial.auc=c(100, 90), partial.auc.correct=TRUE,
 17             # partial.auc.focus="sens"
 18             );roc1  # Build a ROC object and compute the AUC
 19 roc2 <- roc(aSAH$outcome, aSAH$ndka, 
 20             percent=T,  #设置ROC曲线显示为百分比形式
 21             );roc2  # Create a few more curves for the next examples
 22 # smooth=TRUE 绘制光滑曲线,默认为F,可省略
 23 auc(roc1);ci(roc1)
 24 auc(roc2);ci(roc2)
 25 
 26 roc.test(roc1,roc2,method = "delong") # 其他两种方法 “bootstrap”或“venkatraman”
 27 # roc.test(roc1,roc2,method = "bootstrap") # 其他两种方法 “bootstrap”或“venkatraman”
 28 # roc.test(roc1,roc2,method = "venkatraman") # 其他两种方法 “bootstrap”或“venkatraman”
 29 
 30 # plot(roc1,
 31 #      print.auc=TRUE,print.auc.x=0.5,print.auc.y=0.5,  # 图像上输出AUC值,坐标为(x,y)
 32 #      auc.polygon=TRUE, auc.polygon.col="skyblue",  # 设置ROC曲线下填充色
 33 #      max.auc.polygon=TRUE,   # 填充整个图像
 34 #      partial.auc=c(1, 0.8), partial.auc.focus="sp",  # sp改为se试试
 35 #      grid=c(0.1, 0.2),grid.col=c("green", "red"), # 设置间距为0.1,0.2,线条颜色
 36 #      print.thres=TRUE,   # 图像上输出最佳截断值
 37 #      reuse.auc=F)
 38 
 39 # plot(roc1, # roc1换为roc2,更改参数可绘制roc2曲线
 40 #      print.auc=TRUE,print.auc.x=0.5,print.auc.y=0.5, # 图像上输出AUC值,坐标为(x,y)
 41 #      auc.polygon=TRUE, auc.polygon.col="skyblue", # 设置ROC曲线下填充色
 42 #      max.auc.polygon=TRUE, # 填充整个图像
 43 #      grid=c(0.1,0.2), grid.col=c("green", "red"), # 设置间距为0.1,0.2,线条颜色
 44 #      print.thres=TRUE, print.thres.cex=0.8,  # 图像上输出最佳截断值,字体缩放0.8倍
 45 #      legacy.axes=TRUE)  # 使横轴从0到1,表示为1-特异度
 46 
 47 opar<-par(no.readonly = T)
 48 par(xaxs = 'i', yaxs = "i",
 49     mar=c(4, 4, 0, 0)+.1,
 50     mgp=c(2.5, 1, 0),
 51     # pin = c(2,3),#绘图尺寸
 52     omd=c(0, 0.95, 0, 0.95)
 53     )
 54 plot(roc1, 
 55      print.auc=TRUE, print.auc.x=40, print.auc.y=45,
 56      # 图像上输出AUC值,坐标为(x,y)
 57      auc.polygon=TRUE, auc.polygon.col="#fff7f7", # 设置ROC曲线下填充色
 58      max.auc.polygon=FALSE,  # 填充整个图像
 59      grid=c(20, 30), grid.col=c("black", "black"),  # 设置间距为0.1,0.2,线条颜色
 60      # print.thres=TRUE, print.thres.cex=0.9, # 图像上输出最佳截断值,字体缩放倍数
 61      smooth=F, # 绘制不平滑曲线
 62 
 63      main="Comparison of two ROC curves", # 添加标题
 64      col="#FF2E63",  # 曲线颜色
 65      legacy.axes=T,   # 使横轴从0到1,表示为1-特异度,否则横轴从1-0
 66      # xlim = c(1,0),ylim = c(0.108,1),
 67      # xlim=if(roc1$percent){c(100, 0)} else{c(1, 0)},
 68      # ylim=if(roc1$percent){c(0, 100)} else{c(0, 1)},
 69      
 70      xlab=ifelse(roc1$percent, ifelse(T, "Specificity (%)", "Specificity (%)"),
 71                  ifelse(T, "1 - Specificity", "Specificity")),
 72      ylab=ifelse(roc1$percent, "Sensitivity (%)", "Sensitivity"),
 73      #设置最佳截断值显示为百分比格式
 74      # print.thres.pattern=ifelse(roc1$percent, "%.1f%% (%.1f%%, %.1f%%)", "%.3f (%.3f, %.3f)"),
 75      xaxt="n", yaxt="n",  #先不显示坐标轴刻度
 76 
 77      )
 78 axis(1,at = c(0,20,40,60,80,100),labels = c(0,20,40,60,80,100))
 79 axis(2,at = c(0,20,40,60,80,100),labels = c(0,20,40,60,80,100))
 80 # box("plot",lty=2,lwd=4,col="red")
 81 # box("inner",lty=2,lwd=4,col="green")
 82 # box("outer",lty=2,lwd=4,col="yellow")
 83 # box("figure",lty=2,lwd=4,col="blue")
 84 
 85 plot.roc(roc2,
 86          add=T,  # 增加曲线
 87          col="#252A34", # 曲线颜色为红色
 88          # print.thres.pattern=ifelse(roc2$percent, "%.1f%% (%.1f%%, %.1f%%)", "%.3f (%.3f, %.3f)"),
 89          # print.thres=TRUE, print.thres.cex=0.9,  # 图像上输出最佳截断值,字体缩放倍数
 90          print.auc=TRUE, print.auc.x=40,print.auc.y=40,
 91          # 图像上输出AUC值,坐标为(x,y)
 92          smooth = F,   # 绘制不平滑曲线
 93          legacy.axes=F,   # 使横轴从0到1,表示为1-特异度
 94          xaxs = 'i', yaxs = "i",   #图形与边框间距
 95          )  
 96 
 97 
 98 
 99 # dev.off()
100 testobj <- roc.test(roc1,roc2)   # 检验两条曲线
101 text(40, 33.5, labels=paste("P value =", format.pval(testobj$p.value)), adj=c(0, .5)) # 在图上添加P值
102 legend(95,95,  # 图例位置
103        bty = "n",  # 图例样式,默认为 "o"
104        title="",   # 引号内添加图例标题
105        legend=c("roc1","roc2"),  # 添加分组
106        col=c("#FF2E63","#252A34"),  # 颜色跟前面一致
107        lwd=2)  # 线条粗细
108 
109 # par(opar)
110 # ggroc函数绘制多条曲线
111 # roc.list <- roc(outcome ~ wfns + s100b + ndka, data = aSAH)
112 # ggroc1 <- ggroc(roc.list,
113 #                 legacy.axes = TRUE); ggroc1
114 # ggroc1 + xlab("1-specificity") + ylab("Sensitivity") +
115 #   theme_minimal() + ggtitle("My ROC curve") +
116 #   geom_segment(aes(x = 0,xend = 1,y = 0,yend = 1),col = "darkgrey",linetype = "dashed")

绘制曲线示例数据。

标签:曲线,ROC,library,ggplot2,install,Rcpp,packages,pROC
来源: https://www.cnblogs.com/ak422/p/16115148.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有