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 分别计算roc1、roc2的AUROC和95%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值,坐标为(x,y)
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.1,0.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值,坐标为(x,y)
auc.polygon=TRUE, auc.polygon.col="skyblue", # 设置ROC曲线下填充色
max.auc.polygon=TRUE, # 填充整个图像
grid=c(0.1,0.2), grid.col=c("green", "red"), # 设置间距为0.1,0.2,线条颜色
print.thres=TRUE, print.thres.cex=0.8, # 图像上输出最佳截断值,字体缩放0.8倍
legacy.axes=TRUE) # 使横轴从0到1,表示为1-特异度
7.2 plot函数绘制多条曲线
plot(roc1,
print.auc=TRUE, print.auc.x=0.4, print.auc.y=0.5,
# 图像上输出AUC值,坐标为(x,y)
auc.polygon=TRUE, auc.polygon.col="#fff7f7", # 设置ROC曲线下填充色
max.auc.polygon=FALSE, # 填充整个图像
grid=c(0.5, 0.2), grid.col=c("black", "black"), # 设置间距为0.1,0.2,线条颜色
print.thres=TRUE, print.thres.cex=0.9, # 图像上输出最佳截断值,字体缩放倍数
smooth=F, # 绘制不平滑曲线
main="Comparison of two ROC curves", # 添加标题
col="#FF2E63", # 曲线颜色
legacy.axes=TRUE) # 使横轴从0到1,表示为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值,坐标为(x,y)
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学术服务”微信公众号
如有侵权,请联系本站删除!