3

我有一个使用 pROC 包创建的简单 ROC 图:

plot.roc(response, predictor)

正如预期的那样,它工作正常,但我想添加一条“理想”形状的参考曲线,AUC 为 0.8 以进行比较(我的 ROC 图的 AUC 为 0.66)。

有什么想法吗?

澄清一下,我并不是要平滑我的 ROC 图,而是尝试添加代表 AUC 0.8 的参考曲线(类似于代表 AUC 0.5 的参考对角线)。

4

2 回答 2

3

参考对角线是有意义的(随机猜测的模型),因此您同样必须定义与 AUC 0.8 参考曲线关联的模型。不同的模型将与不同的参考曲线相关联。

例如,可以定义一个模型,其中预测概率在 0 和 1 之间均匀分布,对于预测概率为 p 的点,对于某个常数 k,真实结果的概率为 p^k。事实证明,对于这个模型,k=2 会产生一个 AUC 为 0.8 的图。

library(pROC)
set.seed(144)
probs <- seq(0, 1, length.out=10000)
truth <- runif(10000)^2 < probs
plot.roc(truth, probs)
# Call:
# plot.roc.default(x = truth, predictor = probs)
# 
# Data: probs in 3326 controls (truth FALSE) < 6674 cases (truth TRUE).
# Area under the curve: 0.7977

在此处输入图像描述

一些代数表明,这个特定的模型系列具有 AUC (2+3k)/(2+4k),这意味着它可以根据 k 的值生成 AUC 介于 0.75 和 1 之间的曲线。

您可以使用的另一种方法与逻辑回归相关联。如果你有逻辑回归线性预测函数值 p,也就是你会预测概率 1/(1+exp(-p)),那么如果 p 加上一些正态分布的噪声超过 0,你可以将真实结果标记为真,否则标记真结果为假。如果正态分布噪声的方差为 0,则您的模型的 AUC 为 1,如果正态分布的噪声的方差接近无穷大,则您的模型的 AUC 为 0.5。

如果我假设原始预测是从标准正态分布中得出的,那么看起来标准偏差为 1.2 的正态分布噪声给出 AUC 0.8(不过,我无法为 AUC 找出一个很好的封闭形式):

set.seed(144)
pred.fxn <- rnorm(10000)
truth <- (pred.fxn + rnorm(10000, 0, 1.2)) >= 0
plot.roc(truth, pred.fxn)
# Call:
# plot.roc.default(x = truth, predictor = pred.fxn)
# 
# Data: pred.fxn in 5025 controls (truth FALSE) < 4975 cases (truth TRUE).
# Area under the curve: 0.7987

在此处输入图像描述

于 2015-04-17T01:37:20.567 回答
2

一种快速/粗略的方法是在您的绘图上添加一个半径为 1 的圆,其 AUC pi/4 = 0.7853982

library(pROC)
library(car)

n <- 100L

x1 <- rnorm(n, 2.0, 0.5)
x2 <- rnorm(n, -1.0, 2)
y <- rbinom(n, 1L, plogis(-0.4 + 0.5 * x1 + 0.1 * x2))

mod <- glm(y ~ x1 + x2, "binomial")
probs <- predict(mod, type = "response")

plot(roc(y, probs))
ellipse(c(0, 0), matrix(c(1,0,0,1), 2, 2), radius = 1, center.pch = FALSE, col = "blue")

鹏

于 2015-04-17T18:03:18.627 回答