我有一个简单的ROC图,我正在使用pROC包创建:
plot.roc(response, predictor)
正如预期的那样工作正常,但我想添加一个“理想”形状的参考曲线与AUC 0.8进行比较(我的ROC图的AUC为0.66)。
有什么想法吗?
为了澄清一下,我并没有试图平滑我的ROC图,而是试图添加一个代表AUC 0.8的参考曲线(类似于代表AUC 0.5的参考对角线)。
答案 0 :(得分: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),这意味着它可以生成AUC在0.75和1之间的曲线,具体取决于k的值。
您可以使用的另一种方法与逻辑回归相关联。如果你有逻辑回归线性预测函数值p,也就是你预测概率1 /(1 + exp(-p)),那么如果p加上一些正态分布的噪声超过0,你可以将真实结果标记为真,否则标签真实的结果是假的。如果正态分布的噪声具有方差0,则模型将具有AUC 1,并且如果正态分布的噪声具有接近无穷大的方差,则模型将具有AUC 0.5。
如果我假设原始预测是从标准正态分布中得出的,那么看起来正常分布的噪声与标准偏差1.2给出AUC 0.8(尽管如此,我无法找出AUC的良好封闭形式): / p>
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
答案 1 :(得分: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")