我正在使用pROC软件包创建一个简单的ROC图:
plot.roc(response, predictor)
目前情况良好,如预期所示,但我想添加一个“理想”的参考曲线,其AUC为0.8,以进行比较(我的ROC图的AUC为0.66)。
有什么想法吗?
只是为了澄清,我不是试图平滑我的ROC图,而是尝试添加一个代表AUC 0.8的参考曲线(类似于代表AUC 0.5的参考对角线)。
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值在0.75到1之间生成AUC。
另一个方法是与逻辑回归相关的。如果你有逻辑回归线性预测函数值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
一个快速/粗略的方法是在你的图表上添加一个半径为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")