添加任意曲线,AUC 0.8到ROC图

时间:2015-04-16 23:27:19

标签: r roc auc

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

plot.roc(response, predictor)

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

有什么想法吗?

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

2 个答案:

答案 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

enter image description here

一些代数表明这个特殊的模型族具有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

enter image description here

答案 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")

roc