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例动脉瘤蛛网膜下腔出血患者的临床和实验室资料。
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()
函数创建对象。
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曲线专业绘制包,可以多探索探索。