Добавление pch на кривых RO C и маркировка значений AU C - PullRequest
0 голосов
/ 03 февраля 2020

Я хочу построить кривые RO C для 5 оценочных моделей, используя приложение R's pROC. Поскольку я использую оттенки серого, которые могут визуально выглядеть неразличимыми, поэтому я хочу подчеркнуть различные типы линий, назначая разные pch различным кривым RO C, однако я обнаружил, что функция lines() совершенно не реагирует на pch варианты.

Кроме того, когда я хочу пометить их соответствующие значения AU C, используя опцию print.auc, помимо модели по умолчанию (Модель 1), функции roc() и lines(), похоже, работают , Показано только значение AU C для первой модели.

Будет очень признательно, если кто-нибудь подскажет мне несколько возможных способов достижения желаемого результата. Ниже мой текущий код для сюжета и вывода.

### 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))

Output

1 Ответ

1 голос
/ 04 февраля 2020

Помимо цвета, в строке можно изменить две вещи: тип (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))

enter image description here

Кроме того, вы достигнете пределов того, что можете показать на черно-белом графике.

Если бы у вас было меньше точек на кривой RO C, я бы предложил использовать type = "b", который строит точки и линии:

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

enter image description here

Тогда вы можете играть с pch, bg и col по очкам тоже. Однако, как вы заметили, это не сработает для вас, потому что у вашей кривой слишком много точек.

...