手把手教你R语言基于pROC包绘制多条ROC曲线

ROC曲线也叫受试者工作曲线,原来用在军事雷达中,后面广泛应用于医学统计中。ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。
ROC曲线主要应用于二分类结局,比如是否死亡,疾病诊断,肿瘤复发等等,可以用于自变量为连续变量的截点判定。
手把手教你R语言基于pROC包绘制多条ROC曲线_第1张图片
可以做ROC曲线的软件很多,如SPSS,R语言,Stata, SAS等等,既往我们已经介绍了使用SPSS制作ROC曲线,今天我们来介绍怎么使用R语言绘制多条ROC曲线,继续使用我们的肺炎数据(公众号回复:肺炎,可以获得数据),我们先导入包和数据

library(pROC)
bc<-read.csv("E:/r/test/feiyan.csv",sep=',',header=TRUE)
names(bc)

手把手教你R语言基于pROC包绘制多条ROC曲线_第2张图片
手把手教你R语言基于pROC包绘制多条ROC曲线_第3张图片
数据fy为二分类结局变量,其余4个均是炎症指标,都是连续变量,假设我们想知道炎症指标TNF和肺炎发生关系的ROC曲线

roc1<- roc(bc$fy, bc$TNF)
plot(roc1)

手把手教你R语言基于pROC包绘制多条ROC曲线_第4张图片
这样一个最简单的ROC曲线就画好了,假设我们想让它光滑一点,并且修改曲线额颜色

plot(smooth(roc1),col="red")

手把手教你R语言基于pROC包绘制多条ROC曲线_第5张图片
我们还可以更改Y轴的样式,做成类似SPSS那种

plot(roc1,col="red",legacy.axes=T)##更改Y轴格式

手把手教你R语言基于pROC包绘制多条ROC曲线_第6张图片
还可以进一步修改,增加AUC和95%CI

plot(roc1,col="red",legacy.axes=T,print.auc=TRUE)##显示AUC面积
plot(roc1,col="red",legacy.axes=T,print.auc=TRUE,print.thres=TRUE)##添加截点和95%CI

手把手教你R语言基于pROC包绘制多条ROC曲线_第7张图片
进一步修改,增加曲线面积
p

lot(roc1, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),
     grid.col=c("green", "red"), max.auc.polygon=TRUE,
     auc.polygon.col="lightblue", print.thres=TRUE)

手把手教你R语言基于pROC包绘制多条ROC曲线_第8张图片
还可以其他方式的截点

par(mfrow=c(1,2))##分屏显示
plot(roc1, print.thres="best", print.thres.best.method="youden")
plot(roc1, print.thres="best", print.thres.best.method="closest.topleft")

手把手教你R语言基于pROC包绘制多条ROC曲线_第9张图片
下面我们来绘制多个ROC曲线,先增加3个ROC

roc2<- roc(bc$fy, bc$IL6)
roc3<- roc(bc$fy, bc$sTREM1)
roc4<- roc(bc$fy, bc$PCT)

逐步添加曲线

plot(roc1,col="red",legacy.axes=T)
plot(roc2, add=TRUE, col="blue")
plot(roc3, add=TRUE, col="green")
plot(roc4, add=TRUE, col="black")

手把手教你R语言基于pROC包绘制多条ROC曲线_第10张图片
添加图例

legend("bottomright", legend=c("roc1","roc2","roc3","roc4"),col=c("red","blue","green","black"),lty=1)

手把手教你R语言基于pROC包绘制多条ROC曲线_第11张图片
我们先求出每个曲线的AUC

round(auc(roc1),3)##AUC
round(ci(roc1),3)##95%CI
round(auc(roc2),3)##AUC
round(ci(roc2),3)##95%CI
round(auc(roc3),3)##AUC
round(ci(roc3),3)##95%CI
round(auc(roc4),3)##AUC
round(ci(roc4),3)##95%CI

手把手教你R语言基于pROC包绘制多条ROC曲线_第12张图片
进一步修改图例

legend("bottomright", legend=c("roc1-auc0.637","roc2-auc0.657","roc3-auc0.774","roc4-auc0.872"),
       col=c("red","blue","green","black"),lty=1)

手把手教你R语言基于pROC包绘制多条ROC曲线_第13张图片
这样,一个符合论文发表的ROC曲线就做好了,很容易把,假设我们想知道TNF和PCT的曲线面积有无统计学差异,等于说对2个指标进行诊断效能的比较

roc.test(roc1,roc4)

手把手教你R语言基于pROC包绘制多条ROC曲线_第14张图片
结果显示PCT诊断肺炎效能优于TNF,结果有统计学意义。
更多精彩文章请关注公众号:零基础说科研
手把手教你R语言基于pROC包绘制多条ROC曲线_第15张图片

你可能感兴趣的:(R语言,r语言,开发语言)