R语言统计与绘图:可视化ROC曲线的置信区间

2021-02-22 15:09:51 浏览数 (2)

ROC曲线是临床中常用的统计分析之一,R中可以绘制ROC曲线的包也有很多,pROC包就是其中的佼佼者。

pROC包可以计算AUC和95%置信区间,可以可视化、平滑和比较ROC曲线。

pROC包中的常用缩写:

缩写

解释

ROC曲线

受试者操作特征曲线

AUC

ROC曲线下面积

pAUC

部分ROC曲线下面积

CI

置信区间

SP

特异度specificity

SE

灵敏度sensitivity

下面来学习下怎么使用pROC包来可视化ROC曲线的置信区间。


目 录

  • 1. 安装和加载R包
  • 2. 读取内置数据集
  • 3. 建立拟合曲线
  • 4. 可视化ROC曲线的CI
    • 4.1 可视化阈值的CI
    • 4.2 绘制特定阈值的CI
    • 4.3 可视化灵敏度的CI
    • 4.4 可视化特异度的CI
    • 4.5 可视化指定特异度和灵敏度的CI
    • 4.6 调整CI的形状
    • 4.7 绘制多条曲线的CI
  • 5. plot.ci()函数

1. 安装和加载R包

在绘制图形前需要下载和加载pROC包。

代码语言:javascript复制
install.packages("pROC") # 安装pROC包
library(pROC) # 加载pROC包

2. 读取内置数据集

使用pROC包自带的aSAH数据集来演示。该数据集包括了113例动脉瘤蛛网膜下腔出血患者的临床和实验室资料。

代码语言:javascript复制
data(aSAH) # 加载内置数据集
View(aSAH) # 查看数据集

aSAH数据集包括113名患者,7个变量

3. 建立拟合曲线

在pROC包中,使用roc()函数来建立ROC对象。默认情况下roc()函数会输出AUC的值。

代码语言:javascript复制
roc1 <- roc(aSAH$outcome, aSAH$s100b,
            levels=c("Good", "Poor")) 
roc2 <- roc(aSAH$outcome, aSAH$ndka,
            levels=c("Good", "Poor"))
roc1;roc2

4. 可视化ROC曲线的CI

plot.ci()函数能够在ROC曲线上增加置信区间,置信区间可以表示为条形或置信带形状。

4.1 可视化阈值的CI

在绘制阈值的CI之前,需要使用ci.thresholds()函数创建对象。

代码语言:javascript复制
plot(roc1)
thr.obj <- ci.thresholds(roc1) 
plot(thr.obj) # ci.thresholds()函数创建的对象

4.2 绘制特定阈值的CI

代码语言:javascript复制
roc4 <- plot.roc(aSAH$outcome, aSAH$s100b,
                   ci=TRUE, print.auc=TRUE) 
rocthr <- ci(roc4, of="thresholds", thresholds="best")
plot(rocthr) 

4.3 可视化灵敏度的CI

代码语言:javascript复制
plot(roc1)
se.obj <- ci(roc1, of="se", boot.n=500) 
plot(se.obj) 

4.4 可视化特异度的CI

代码语言:javascript复制
plot(roc1)
sp.obj <- ci.sp(roc1, boot.n=500) 
plot(sp.obj) 

4.5 可视化指定特异度和灵敏度的CI

代码语言:javascript复制
rocobj <- plot.roc(aSAH$outcome, aSAH$s100b,
                   ci=TRUE, of="se", 
                   specificities=seq(0.2, 1, 0.25)) 
plot(ci.sp(rocobj, sensitivities=seq(0.2, 1, 0.25))) 
代码语言:javascript复制
rocobj <- plot.roc(aSAH$outcome, aSAH$s100b,
                   ci=TRUE, of="se", 
                   specificities = c(0.2, 0.4)) 
plot(ci.sp(rocobj, sensitivities = c(0.4, 0.6)))

4.6 调整CI的形状

代码语言:javascript复制
plot(roc1)
sp.obj <- ci.sp(roc1, sensitivities=seq(0, 1, .01), boot.n=100) 
plot(sp.obj, type="shape", col="#5bd1d7") 

4.7 绘制多条曲线的CI

代码语言:javascript复制
plot(roc1) # 绘制ROC曲线
plot(roc2, add = TRUE) # 添加ROC曲线到现有图形上
sp.obj1 <- ci.sp(roc1, sensitivities=seq(0, 1, .01), boot.n=100) 
sp.obj2 <- ci.sp(roc2, sensitivities=seq(0, 1, .01), boot.n=100) 
plot(sp.obj1, type="shape", # 绘制置信区间,设置CI形状,调节颜色参数
     col = rgb(25,12,100,alpha=10,max=255))
plot(sp.obj2, type="shape", # 绘制置信区间,设置CI形状,调节颜色参数
     col = rgb(155,227,0,alpha=20,max=255)) 

5. plot.ci()函数

plot.ci()函数可以调整函数中的参数来向ROC曲线上添加置信区间,置信区间形状有bars和shape两种,

代码语言:javascript复制
plot(x,       
     type=c("bars", "shape"),       
     length=.01*ifelse(attr(x,"roc")$percent, 100, 1),       
     col=ifelse(type=="bars", par("fg"),"gainsboro"),       
     no.roc=FALSE,       
     ...)

# 部分参数解释
x  # 由ci.thresholds()、ci.se()或ci.sp()函数创建的对象
type  # 置信区间的类型,有条形bars和置信带shape两种,可以缩写为"b"或"s"。  
# "shape"仅适用于ci.se()和ci.sp()函数,不适用于ci.thresholds()函数。
length # bars刻度线的长度,只在 type=bars 时使用
col # 条形或置信带形状的颜色。
no.roc # 逻辑词,如果为FALSE,则将ROC曲线重新添加到该形状上;
# 如果为TRUE,则只绘制形状;在type=bars则忽略

ROC曲线外观参数的修改参考《R语言统计与绘图:pROC包绘制ROC曲线》这篇推文。


总结绘制ROC曲线的R包的区别

pROC包是目前功能最全面的ROC曲线专业绘制包,可以多探索探索。

0 人点赞