大家好,我是阿琛。在上一期的内容中,从SPSS和R软件出发,我给大家介绍了ROC曲线的简单绘制方法(临床生信SCI加分必备!ROC可视化教程看这篇就够了!你一定要试试!)。今天我们一起来看看如何将得到的ROC曲线进行美化,以及更进一步衍生。
下面,我们一起来看下ROC曲线各种进阶版本的绘制方法。 首先,自然是R包的安装与引用过程。特定的分析功能,需要相应的程序包来实现。在上周的内容中,我们给大家介绍了ROCR包的使用方法。在此,我们以pROC包为例,给大家讲解一下整个的绘制过程。#install.packages('pROC') library(pROC)
rt <- read.table('exp.txt', header=T,sep=' ', check.names=F, row.names=1) head(rt) #查看数据集前6行内容 可以发现,该数据集包含病人名称(ID),组织类型(Type),以及两个不同的基因表达水平(VCAN和TP53)等变量内容。 同时,使用str()函数,提示数据集中一共有407例样本,其中32例为正常样品,375例为肿瘤样品。本次分析的目的是为了探究VCAN和TP53基因对区分患者正常和肿瘤的能力,并比较两者之间是否存在差异。随后,利用roc()函数,分别构建两个不同的预测模型。ROC1 <- roc(rt$Type, rt$VCAN, levels = c('Normal', 'Tumor')) ROC2 <- roc(rt$Type, rt$TP53, levels = c('Normal', 'Tumor')) ROC1 #查看模型的预测效能 ROC2 #查看模型的预测效能 结果显示,对于预测375例肿瘤组织和32例正常样品,VCAN和TP53基因的ROC曲线下面积分别为0.8535和0.7582。
#绘制ROC曲线 plot(ROC1, col = 'red', #设置曲线颜色 legacy.axes = TRUE, #使x轴变为1-Specificity xlab = '1-Specificity') 首先,我们先通过plot()函数,将ROC曲线的最简图形绘制出来。#拟合平滑的ROC曲线 plot(smooth(ROC1, method='density'), #使用smooth()函数进行平滑拟合 add = FALSE, #不添加到上一个图层 col = 'red', #设置曲线颜色 legacy.axes = TRUE, #使x轴变为1-Specificity xlab = '1-Specificity') 柔美的线条总是更具优势,也符合大家的审美需求。通过smooth()函数,对上图中的曲线进行简单的拟合,从而得到了一个新的ROC曲线。plot(ROC1) ROC3 <- ci.sp(ROC1, sensitivities = seq(0, 1, 0.01), #评估CI的敏感性 boot.n = 2000) #重复计算次数,默认为2000次 plot(ROC3, add = FALSE, #不添加到上一个图层 type = 'shape', #置信区间的类型 col = 'red') 接着,基于ci.sp()函数,通过2000次重复计算,对预测模型进行不断的拟合,最终得到ROC曲线在不同取值时所对应的95%可信区间。plot(ROC1, add = FALSE, #不添加至上一图层 col = 'red', #设置曲线颜色 legacy.axes = TRUE, #使x轴变为1-Specificity xlab = '1-Specificity', print.auc =TRUE, print.auc.x = 0.5, #输出auc值的x轴位置 print.auc.y = 0.5, #输出auc值的y轴位置 print.thres = TRUE) 结果显示,在VCAN表达预测患者正常和肿瘤组织时,取其表达量为5.835时为最佳的截断值(cut-off value),且其特异性为0.938,灵敏性为0.739。
#绘制2条ROC曲线 plot(ROC1, col = 'red', #设置曲线颜色 legacy.axes = TRUE, #使x轴变为1-Specificity xlab = '1-Specificity') plot(ROC2, add = TRUE, #添加至上一图层 col = 'blue', #设置曲线颜色 legacy.axes = TRUE, #使x轴变为1-Specificity xlab = '1-Specificity') legend(0.2, 0.2, lwd = 2, legend = c('VCAN', 'TP53'), col = c('red', 'blue')) 与之前介绍的内容一样,通过将add参数的值修改为TRUE,即可将两个曲线显示哥同一个图层中,其中红色和蓝色曲线分别代表VCAN和TP53两个基因。#比较并添加p值 test <- roc.test(ROC1, ROC2) #对两条ROC曲线进行比较 text(0.6, 0.2, #设置坐标轴位置 adj = c(0, 0.5), labels = paste0('P value =', format.pval(test$p.value))) #添加p值 对两条曲线进行比较,结果显示,P = 0.00875 <0.05,即两条曲线之间存在显著性差异,说明VCAN的预测效能显著高于TP53基因,结果图如下图所示。plot(ROC1, add = FALSE, #不添加至上一图层 col = 'red', #设置曲线颜色 legacy.axes = TRUE, #使x轴变为1-Specificity xlab = '1-Specificity', main = 'ROC Curve for VCAN', #添加标题 print.auc =TRUE, auc.polygon = TRUE, #将auc曲线下面积转换为多边形 auc.polygon.col = '#fff7f7', #设置多边形的填充色 grid = c(0.5, 0.2), #设置两轴网格线的间隔为0.5,0.2 grid.col = c('black', 'black'), #设置两轴网格线的颜色 print.thres = TRUE) legend(0.25, 0.2, #设置位置的x轴和y轴坐标 lwd = 2, legend = 'VCAN', col = 'red') #颜色与ROC曲线的颜色一致 除了讲解提到的添加,在plot()函数中还有许多参数可供大家进行修改。在此,我们将前面的内容进行综合,并增加了一些其他相关图形美化的参数,得到了最终版本的ROC曲线。回顾一下,在上一期ROC内容的基础上,我们通过pROC包为演示,展示了曲线平滑化,cut-off值的添加,两条ROC曲线比较等内容。好啦,本次的讲解就到此为止了,大家多多练习,掌握该项绘图技能~~~
|