在 ROC 曲线上添加 pch 并标记 AUC 值

Adding pch on ROC curves and labelling AUC values

我想使用 R 的 pROC 应用程序绘制 5 个估计模型的 ROC 曲线。因为我使用的是灰度,在视觉上可能看起来无法区分,所以我想通过将不同的 pch 分配给不同的 ROC 曲线来强调不同的线型,但是,我发现 lines() 函数对pch 个选项。

此外,当我想使用 print.auc 选项标记它们各自的 AUC 值时,除了默认模型(模型 1)之外,roc()lines() 函数确实看起来上班。仅显示第一个模型的 AUC 值。

如果有人能指出一些可行的方法来达到预期的结果,我将不胜感激。下面是我当前的绘图和输出代码。

### load the data ###
library(readxl)

dataURL <- "https://www.dropbox.com/s/vri9fx2xa1pfj7w/predict.xlsx?dl=1"
temp = tempfile(fileext = ".xlsx")
download.file(dataURL, destfile=temp, mode='wb')
predict <- readxl::read_excel(temp, sheet =1)

### plotting and labelling ###

library(pROC)

roc.pred2 <- roc(predict$IAC, predict$phat2, percent = TRUE, main = "Smoothing")
roc.pred3 <- roc(predict$IAC, predict$phat3, percent = TRUE, main = "Smoothing")
roc.pred4 <- roc(predict$IAC, predict$phat4, percent = TRUE, main = "Smoothing")
roc.pred5 <- roc(predict$IAC, predict$phat5, percent = TRUE, main = "Smoothing")

plot.roc(predict$IAC, predict$phat1, percent = TRUE, main = "ROC curves", add =  FALSE, asp = NA, print.auc = TRUE)

lines(roc.pred2, type = "l", lty = 2, col = "grey35")
lines(roc.pred3, type = "l", lty = 3, col = "grey48")
lines(roc.pred4, type = "l", lty = 4, col = "grey61")
lines(roc.pred5, type = "l", lty = 1, pch = 24, col = "grey76")

legend("bottomright", 
       legend = c("Model 1", "Model 2", "Model 3", "Model 4", "Model 5"), 
       col = c("black", "grey35", "grey48", "grey61", "grey76"),
       lty = c(1, 2, 3, 4, 1))

除了颜色之外,您还可以在一行中更改两件事:类型 (lty) 和宽度 (lwd)。

plot.roc(predict$IAC, predict$phat1, percent = TRUE, main = "ROC curves", add =  FALSE, asp = NA, print.auc = TRUE)

lines(roc.pred2, type = "l", lty = 2, col = "grey35")
lines(roc.pred3, type = "l", lty = 3, lwd = 4, col = "grey48")
lines(roc.pred4, type = "l", lty = 4, lwd = 8, col = "grey61")
lines(roc.pred5, type = "l", lty = 1, pch = 24, col = "grey76")

legend("bottomright", 
       legend = c("Model 1", "Model 2", "Model 3", "Model 4", "Model 5"), 
       col = c("black", "grey35", "grey48", "grey61", "grey76"),
       lty = c(1, 2, 3, 4, 1),
       lwd = c(1, 1, 4, 8, 1))

除此之外,您将达到在黑白图上显示内容的极限。

如果您的 ROC 曲线上的点较少,我建议使用 type = "b" 绘制点和线:

data(aSAH)
plot(roc(aSAH$outcome, aSAH$wfns), type = "b")

那你也可以在点数上玩pchbgcol。但是,正如您注意到的那样,这对您不起作用,因为您的曲线有太多点。