Аннотировать значения AUC для фасетных графиков отдельно

Есть ли способ отдельно аннотировать значения AUC для фасетных графиков? Пример кода ниже аннотирует оба значения AUC на обоих графиках. Это особенно проблематично для меня, так как мне нужно построить ~ 10 графиков ROC, что делает аннотацию очень длинной / неразборчивой, как показано ниже. Спасибо.

library(plotROC)

set.seed(2529)
D.ex <- rbinom(200, size = 1, prob = .5)
M1 <- rnorm(200, mean = D.ex, sd = .65)
M2 <- rnorm(200, mean = D.ex, sd = 1.5)
M3 <- rnorm(200, mean = D.ex, sd = 1.7)
M4 <- rnorm(200, mean = D.ex, sd = 1.8)
M5 <- rnorm(200, mean = D.ex, sd = 1.9)
M6 <- rnorm(200, mean = D.ex, sd = 2.0)
M7 <- rnorm(200, mean = D.ex, sd = 2.2)
M8 <- rnorm(200, mean = D.ex, sd = 2.5)
M9 <- rnorm(200, mean = D.ex, sd = 2.7)
M10 <- rnorm(200, mean = D.ex, sd = 3.0)

test <- data.frame(D = D.ex, D.str = c("Healthy", "Ill")[D.ex + 1], M1 = M1, M2 = M2, M3 = M3, M4 = M4, M5 = M5, M6 = M6, M7 = M7, M8 = M8, M9 = M9, M10 = M10,
                   stringsAsFactors = FALSE)

longtest <- melt_roc(test, "D", c("M1", "M2", "M3", "M4", "M5", "M6", "M7", "M8", "M9", "M10"))

pairplot <- ggplot(longtest, aes(d = D, m = M)) + geom_roc() + facet_wrap(~name)

pairplot + geom_rocci(linetype = 1)

pairplot + 
  style_roc(theme = theme_grey) +
  theme(axis.text = element_text(colour = "blue")) +
  ggtitle("Themes and annotations") + 
  facet_wrap(~name) +
  annotate("text", x = .75, y = .25, label = paste("AUC =", round(calc_auc(pairplot)["AUC"], 2))) 

введите здесь описание изображения


person samael    schedule 20.09.2018    source источник


Ответы (1)


Поскольку строка, ведущая к каждому аспекту, одинакова, это означает, что вектор входных данных для аннотации, вероятно, содержит только одно значение. Вы можете убедиться, что это так, запустив:

paste("AUC =", round(calc_auc(pairplot)["AUC"], 2))

[1] "AUC = c(0.83, 0.6, 0.68, 0.63, 0.67, 0.64, 0.68, 0.63, 0.61, 0.59)"

что действительно является единственным значением.

Если вы посмотрите на часть, которая выполняет округление, она возвращает фрейм данных:

round(calc_auc(pairplot)["AUC"], 2)

    AUC
1  0.83
2  0.60
3  0.68
4  0.63
5  0.67
6  0.64
7  0.68
8  0.63
9  0.61
10 0.59

и он вставляет строковое представление фрейма данных в префикс «AUC =". Вы можете исправить это, вернув вектор значений вместо передачи всего фрейма данных в функцию paste.

paste("AUC = ", round(calc_auc(pairplot)[["AUC"]], 2))

# or equally

paste("AUC = ", round(calc_auc(pairplot)$AUC, 2))

и тогда вы получите желаемый результат.

введите здесь описание изображения

person Nick Larsen    schedule 20.09.2018