将 AUC 0.8 的任意曲线添加到 ROC 图

Adding arbitrary curve with AUC 0.8 to ROC plot

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

plot.roc(response, predictor)

它工作正常,正如预期的那样,但我想添加一个 "ideally" 形状的参考曲线,AUC 0.8 用于比较(我的 ROC 图的 AUC 是 0.66)。

有什么想法吗?

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

参考对角线是有意义的(随机猜测的模型),因此您同样必须定义与 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

一种 quick/rough 方法是在您的地块上添加一个半径为 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")