Можно ли вставить строку без дискриминации на графике ROC, используя ggroc?

Я создал график ROC с несколькими кривыми ROC, используя ggroc на основе pROC. Как я могу вставить строку без дискриминации?

Я бы хотел, чтобы на моем графике не было линии от 0,0 до 1,1, чтобы я мог лучше визуально оценить свои ROC-кривые.

Я попытался использовать функцию plot () для моего объекта ggplot, и я попытался использовать + geom_abline() и функцию lines () без всякой удачи.

library(pROC)

#Creating curves and labeling)
ROC_curves <- ggroc(list(log=ROC_log, tree=ROC_tree, xgbt=ROC_xgbt), legacy.axes=TRUE)

ROC_curves2 <- ROC_curves + xlab("FPR") + ylab("TPR")
#but this part doesn't Work: 
+ qplot(1,1) + geom_abline(intercept=0, slope=1)

Я также попытался сделать: plot(ROC_curves2, identity=TRUE)

Я бы хотел, чтобы в моем сюжете не было различий между 0,0 и 1,1.

При добавлении qplot(1,1) + geom_abline() я получаю "Ошибка: не знаю, как добавить o к графику". При использовании plot () график возвращается, но без линии.

2 ответа

ROC_curves уже возвращает график ggplot. Добавление нового сюжета qplot не возможно и не необходимо, просто добавьте geom_abline непосредственно:

ROC_curves + xlab("FPR") + ylab("TPR") + 
    geom_abline(intercept = 0, slope = 1,
                color = "darkgrey", linetype = "dashed")

Аблайн выходит за пределы кривой ROC. Чтобы избежать этого вы можете использовать geom_segment вместо:

ROC_curves + xlab("FPR") + ylab("TPR") + 
    geom_segment(aes(x = 0, xend = 1, y = 0, yend = 1),
                 color="darkgrey", linetype="dashed")

Также обратите внимание, что если вы не используете legacy.axes=TRUE вам нужно иметь intercept = 1 так что линия пересекает линию 0 в правом верхнем углу.

... + geom_segment(aes(x = 0, xend = 1, y = 0, yend = 1)) # legacy.axes = TRUE
... + geom_segment(aes(x = 1, xend = 0, y = 0, yend = 1)) # legacy.axes = FALSE

Решение @Calimo не сработало для меня, но я думаю, что это связано с размером моего набора данных, поэтому график не будет отображаться. Нашел проблему gitlab (https://github.com/tidyverse/ggplot2/issues/4190) о том, какannotateнамного быстрее, чемgeom_segment. Я использую следующее:

+ annotate("segment",x = 1, xend = 0, y = 0, yend = 1, color="red", linetype="dashed")

Другие вопросы по тегам