前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言统计与绘图:可视化ROC曲线的置信区间

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

作者头像
DataCharm
发布2021-02-22 15:09:51
8.1K0
发布2021-02-22 15:09:51
举报

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曲线专业绘制包,可以多探索探索。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 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()函数
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档