绘制重叠的 ROC 曲线

机器算法验证 r 数据可视化
2022-04-06 02:37:39

我正在尝试制作重叠的 ROC 曲线来表示当将特定预测变量一次添加到模型中时模型性能的连续改进。我想为大约 5 个嵌套模型(我将手动定义)中的每一个模型创建一条 ROC 曲线,所有这些都覆盖在一个图中。例如:

    #outcome var
    y = c(rep(0,50), rep(1, 50))

    #predictors
    x1 = y + rnorm(100, sd = 1)
    x2 = y + rnorm(100, sd = 4)

    #correlations of predictors with outcome
    cor(x1, y)
    cor(x2, y)

    library(Epi)
    ROC(form = y ~ x1, plot = "ROC)
    ROC(form = y ~ x1 + x2, plot = "ROC")

我希望两条 ROC 曲线在同一个图上(理想情况下,背景中没有分散注意力的模型信息)。任何 ggplot/图形大师愿意伸出援手吗?

2个回答

caTools提供colAUC功能。使用它并将plotROC参数设置为 TRUE。我对它产生的图表感到满意。

如果您想将 ROC 曲线相互叠加,您可以使用Rroc包中的函数来获取灵敏度和特异性值并手动绘制它们,#outcome var y = c(rep(0,50),代表(1, 50))pROC

#predictors
x1 = y + rnorm(100, sd = 1)
x2 = y + rnorm(100, sd = 4)


model1 = glm(y ~ x1, family = binomial())
pred1 = predict(model1)
model2 = glm(y ~ x1 + x2, family = binomial())
pred2 = predict(model2)

library(pROC)
roc1 = roc(y, pred1)
roc2 = roc(y, pred2)

特异性和敏感性值

> str(roc1)
List of 15
\$ percent           : logi FALSE
\$ sensitivities     : num [1:101] 1 1 0.98 0.98 0.98 0.98 0.98 0.98 0.96...
\$ specificities     : num [1:101] 0 0.02 0.02 0.04 0.06 0.08 0.1 0.12 0.12 
 ...

或使用plot函数作为

plot(roc1, col = 1, lty = 2, main = "ROC")
plot(roc2, col = 4, lty = 3, add = TRUE)

两个 ROC 图

此外,还有绘制能力的pROC::ggroc功能。ggplot2