超好用!一行代码输出ROC曲线、计算AUC、截断值及各种度

577 阅读1分钟

一、简介

今天来学习一个新R包——reportROC,用于生成ROC曲线和AUC值。在医学诊断、生物信息学和机器学习等领域中,ROC曲线和AUC值是评估分类模型性能的重要指标之一,可以通过一行代码绘制ROC曲线及计算敏感性、特异性、准确率、阳性预测值,阴性预测值,AUC值及约登指数,及其简单和方便。

二、数据集

1. 安装及引用

在R中使用以下命令安装reportROC包:

install.packages("reportROC")
library(reportROC)

2. 读取数据

首先,我们需要读取aSAH数据集,查看数据集信息

data(aSAH)
head(aSAH)

结果集展示:

gos6 outcome gender age wfns s100b  ndka
29    5    Good Female  42    1  0.13  3.01
30    5    Good Female  37    1  0.14  8.54
31    5    Good Female  42    1  0.10  8.09
32    5    Good Female  27    1  0.04 10.42
33    1    Poor Female  42    3  0.13 17.40
34    1    Poor   Male  48    2  0.10 12.75

三、基本用法

#for continuous variables
reportROC(gold=aSAH$outcome,
          predictor=aSAH$s100b,
          important="se",
          plot=TRUE)

执行结果展示:

Setting levels: control = Good, case = Poor
 Cutoff   AUC AUC.SE AUC.low AUC.up     P   ACC ACC.low ACC.up   SEN SEN.low SEN.up   SPE SPE.low SPE.up   PLR PLR.low PLR.up   NLR NLR.low NLR.up   PPV PPV.low PPV.up   NPV NPV.low
  0.205 0.731  0.052   0.630  0.833 0.000 0.743   0.740  0.747 0.634   0.487  0.782 0.806   0.714  0.897 3.261   1.930  5.510 0.454   0.299  0.690 0.650   0.502  0.798 0.795   0.702
 NPV.up   PPA PPA.low PPA.up   NPA NPA.low NPA.up   TPA TPA.low TPA.up KAPPA KAPPA.low KAPPA.up
  0.887 0.634   0.487  0.782 0.806   0.714  0.897 0.743   0.663  0.824 0.442     0.270    0.614

Fig1 说实话哈,图是丑了点,但是我们需要的各种结果基本上都展示出来了。

四、补充

在科研统计中,一般都需要知道每条ROC曲线的P值,但是这个目前没有P值,p值可以通过自编函数计算出来,代码如下:

install.packages("pROC")
library(pROC)
library(boot)

# 生成随机数据
set.seed(123)
n <- 50
labels <- sample(c(0, 1), n, replace = TRUE)
scores <- rnorm(n, mean = 0.5 + labels * 0.5)

# 计算ROC曲线
roc <- roc(labels, scores)

# 自助法计算P值
bootfun <- function(data, index) {
  roc <- roc(data$labels[index], data$scores[index])
  return(auc(roc))
}
bootobj <- boot(data = data.frame(labels = labels, scores = scores), statistic = bootfun, R = 2000)
t0 <- auc(roc)
pvalue <- 2 * min(c(mean(bootobj$t <= t0)
pvalue

本文由博客一文多发平台 OpenWrite 发布!