r - 绘制 ROC 曲线并在特定截止信息处计算 R 中的 AUC

标签 r curve roc auc

给定这样的数据: SN = 灵敏度; SP = 特异性

Cutpoint        SN   1-SP
       1       0.5    0.1
       2       0.7    0.2
       3       0.9    0.6

如何绘制 ROC 曲线并计算 AUC。并比较两条不同ROC曲线之间的AUC。在大多数 pROC 或 ROCR 等包中,数据的输入与上面显示的不同。有人可以建议用 R 或其他方法解决这个问题的方法吗?

ROCsdat <- data.frame(cutpoint = c(5, 7, 9), TPR = c(0.56, 0.78, 0.91), FPR = c(0.01, 0.19, 0.58))

## plot version 1
op <- par(xaxs = "i", yaxs = "i")
plot(TPR ~ FPR, data = dat, xlim = c(0,1), ylim = c(0,1), type = "n")
with(dat, lines(c(0, FPR, 1), c(0, TPR, 1), type = "o", pch = 25, bg = "black"))
text(TPR ~ FPR, data = dat, pos = 3, labels = dat$cutpoint)
abline(0, 1)
par(op)

最佳答案

首先,我会建议访问您本地的图书馆并找到一本关于 R 的介绍性书籍。在您编写自己的代码之前有一个坚实的基础很重要,并且在没有真正理解的情况下复制粘贴在互联网上找到的代码手段充其量是有风险的。

关于您的问题,我相信 (0,0) 和 (1,1) 坐标是 ROC 曲线的一部分,因此我将它们包含在数据中:

ROCsdat <- data.frame(cutpoint = c(-Inf, 5, 7, 9, Inf), TPR = c(0, 0.56, 0.78, 0.91, 1), FPR = c(0, 0.01, 0.19, 0.58, 1)) 

下标

我强烈建议不要在 R 训练的这个阶段设置自己的梯形积分函数。它太容易出错,很容易因为一个小的(语法)错误而搞砸。

相反,使用完善的集成代码,例如 pracma 中的 trapz 函数:

library(pracma)
trapz(ROCsdat$FPR, ROCsdat$TPR)

绘图

我想你大部分都明白了情节,尽管我会稍微不同地写它:

plot(TPR ~ FPR, data = ROCsdat, xlim = c(0,1), ylim = c(0,1), type="b", pch = 25, bg = "black")
text(TPR ~ FPR, data = ROCsdat, pos = 3, labels = ROCsdat$cutpoint)
abline(0, 1, col="lightgrey")

比较

为了进行比较,假设您在 auc1auc2 中有两个 AUC。 if/else 语法如下所示:

if (auc1 < auc2) {
    cat("auc1 < auc2!\n")
} else if (auc1 == auc2) {
    cat("aucs are identical!\n")
} else {
    cat("auc1 > auc2!\n")
}

关于r - 绘制 ROC 曲线并在特定截止信息处计算 R 中的 AUC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22413349/

相关文章:

r - 序数逻辑回归给出不合逻辑的结果

modeling - 如何将多个 roc 绘制在一起?

python - 如何在 python 中使用图例和 AUC 分数在一个图中绘制多条 ROC 曲线?

r - 带 Kernlab 的内核 PCA 和结肠癌数据集的分类

r - 将1分钟数据汇总为5分钟平均数据

r - 测试字符串是否与位置 x 相同的函数

python - 如何在 python 中编写螺旋函数?

Java2D : Fill a convex rounded polygon (QuadCurves)

python - 从曲线形状中获取均匀分布的点

classification - 过度拟合和 ROC 曲线