R语言统计与绘图:ROC曲线的统计计算

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. 计算AUC和95%CI
  • 5. 计算和可视化pAUC
    • 5.1 计算pAUC
    • 5.2 可视化pAUC
  • 6. 亚组ROC分析
  • 7. 比较两ROC曲线有无差异
  • 8. auc()函数
  • 9. ci()函数

1. 安装和加载R包

install.packages("pROC"# 安装pROC包
library(pROC) # 加载pROC包

2. 读取内置数据集

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

data(aSAH)   # 加载内置数据集
View(aSAH)   # 查看数据集
aSAH数据集包括113名患者,7个变量

3. 建立拟合曲线

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

roc1 <- roc(aSAH$outcome, aSAH$s100b,
            levels=c("Good""Poor")) 
roc2 <- roc(aSAH$outcome, aSAH$ndka,
            levels=c("Good""Poor"))
roc1;roc2

如果在roc()函数中添加参数ci=TRUE,则可以输出AUC的置信区间。

roc3 <- roc(aSAH$outcome, aSAH$s100b,
            levels=c("Good""Poor"),
            ci=TRUE# 输出95%置信区间
roc3

4. 计算AUC和95%CI

在前面roc()函数创建的ROC对象中已经包含了AUC信息,但是还可以使用auc()函数来计算AUC和pAUC,使用ci()函数或ci.auc()函数来计算AUC和pAUC的95%置信区间。

auc(roc1) 
ci(roc1, of = "auc"# ci.auc(roc1) 等效

auc(roc2)
ci(roc2, of = “auc”# ci.auc(roc2) 等效

输出roc1结果:
# Area under the curve: 0.7314
# 95% CI: 0.6301-0.8326 (DeLong)
roc1的曲线下面积为0.73195%CI为(0.630-0.833)

输出roc2结果:
# Area under the curve: 0.612
# 95% CI: 0.5012-0.7227 (DeLong)
roc2的曲线下面积为0.61295%CI为(0.5010.723)

5. 计算和可视化pAUC

5.1 计算pAUC

auc(roc1, # 前面构建的roc1对象
    partial.auc=c(10.8), # 指定计算pAUC的坐标轴范围
    partial.auc.focus="sp"# 根据哪根轴来计算,这里指定特异度范围(x轴)来计算
    partial.auc.correct = FALSE)
输出结果:  
# Corrected pAUC (specificity 1-0.8): 0.08059。

5.2 可视化pAUC

plot(roc1, 
     print.auc=TRUE# 图像上输出AUC值
     print.auc.x=0.5,print.auc.y=0.5# AUC值的坐标位置为(x,y)
     auc.polygon=TRUE# 将ROC曲线下面积转化为多边形
     auc.polygon.col="skyblue"# 设置多边形填充颜色为skyblue
     partial.auc=c(10.8), # 指定计算pAUC的坐标轴的范围
     partial.auc.focus="sp"# 根据哪根轴来计算,这里指定特异度范围(x轴)来计算 
     reuse.auc=F)

根据灵敏度(y轴)来计算,如partial.auc.focus = "se",其他代码不变。

6. 亚组ROC分析

选取男性进行分析。

roc4 <- roc(outcome ~ s100b, 
            data=aSAH, 
            subset=(gender == "Male"))
roc4
输出结果:
# Call:
# roc.formula(formula = outcome ~ s100b, data = aSAH, subset = (gender ==     "Male"))
# Data: s100b in 22 controls (outcome Good) < 20 cases (outcome Poor).
# Area under the curve: 0.7727

选取女性进行分析。

roc5 <- roc(outcome ~ s100b, 
            data=aSAH, 
            subset=(gender == "Female"))
roc5
输出结果:
# Call:
# roc.formula(formula = outcome ~ s100b, data = aSAH, subset = (gender ==     "Female"))
# Data: s100b in 50 controls (outcome Good) < 21 cases (outcome Poor).
# Area under the curve: 0.72

7. 比较两ROC曲线有无差异

roc.test()函数可以比较两条ROC曲线有没有统计学差异。

roc.test(roc1, roc2, method = "delong")
# 默认使用delong法
# 其他两种比较方法为"bootstrap"或"venkatraman";
# 三种方法可以使用首字母来表示,如"d"、"b"、"v"。
输出结果
# DeLong's test for two correlated ROC curves
# data:  roc1 and roc2
# Z = 1.3908, p-value = 0.1643
# alternative hypothesis: true difference in AUC is not equal to 0
# sample estimates:
# AUC of roc1 AUC of roc2 
#   0.7313686   0.6119580

从输出结果可知,p-value = 0.1643>0.05,两条ROC曲线无统计学差异。另外结果还输出了两条ROC曲线的AUC。

8. auc()函数

auc()函数可以用来计算ROC曲线下面积。默认计算AUC,但是也可以计算pAUC。

函数调用方法:

auc(roc, 
    partial.auc=FALSE, 
    partial.auc.focus=c("specificity","sensitivity"), 
    partial.auc.correct=FALSE, 
    allow.invalid.partial.auc.correct = FALSE...)
    
## 参数解释
roc  # 通过roc()函数建立的ROC对象
partial.auc # 逻辑词,默认为FALSE,计算AUC;
# 如果要计算pAUC,则输入长度为2的数值向量;
# 如果图形坐标轴范围为0-1,则输入如partial.auc=c(1, 0.8);
# 如果图形坐标轴范围为0-100,则输入如partial.auc=c(100, 80)。
partial.auc.focus  # 如果partial.auc = FALSE,则忽略这个参数;
# 如果为TRUE,且需要计算pAUC,则指定是根据特异度(默认)还是灵敏度来计算pAUC;
# 可以使用缩写 spec/sens 或者 sp/se 来表示特异度和灵敏度。

9. ci()函数

ci()函数是用来计算ROC曲线的置信区间,函数中的参数of控制要计算的CI类型,CI类型包括aucthresholdsspsecoords。注意:平滑后的ROC曲线不能计算thresholds的置信区间。

函数调用方法:

ci(roc,  # 通过roc()函数创建的ROC对象
   of = c("auc""thresholds""sp""se""coords"),  
   # 通过参数of,控制计算的CI类型
   ...)

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

统计与绘图

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

2020-6-19 13:26:00

统计与绘图

生存分析如何绘制事件发生累计概率曲线图?

2020-6-19 13:31:29

声明 本网部分文章源于互联网,转载出于传递更多信息和学习之目的,并不意味着赞同其观点。
如转载稿涉及版权等问题,请立即联系管理员,我们会予以修改、删除相关文章,请留言反馈
When your legal rights are being violated, please send an email to: sci666net@qq.com
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索