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

3

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

plot.roc(response, predictor)

目前情况良好,如预期所示,但我想添加一个“理想”的参考曲线,其AUC为0.8,以进行比较(我的ROC图的AUC为0.66)。

有什么想法吗?

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


一个半径为1的(四分之一)圆? - rawr
2个回答

3
参考对角线具有含义(猜测随机的模型),因此您需要类似地定义与AUC 0.8参考曲线相关联的模型。不同的模型将与不同的参考曲线相关联。
例如,可以定义一个模型,其中预测概率在0和1之间均匀分布,并且对于具有预测概率p的点,真实结果的概率为p^k,其中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)曲线,代表它可以根据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

enter image description here


它看起来应该是这样的,除了某些原因它不是完全流畅的。否则这就是我所说的。谢谢。 - Oposum
@Oposum,缺乏平滑性可能只是因为它没有足够的样本构建。您可以尝试使用10万个样本而不是我在此处发布的10,000个样本。 - josliber

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


ROC曲线很少(如果有的话)像圆形一样圆润。我喜欢它的平滑度,但我想象中更像这个图 http://gim.unmc.edu/dxtests/roccomp.jpg 介于黄色和粉色曲线之间。你肯定可以看出它们都不是圆形(特别是黄色的那个)。 - Oposum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接