首页 文章

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

提问于
浏览
3

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

plot.roc(response, predictor)

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

有什么想法吗?

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

2 回答

  • 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的良好封闭形式):

    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

  • 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

相关问题