Аннотируйте значения AUC для фасетных диаграмм отдельно - PullRequest
0 голосов
/ 20 сентября 2018

Есть ли способ аннотировать значения 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))) 

enter image description here

1 Ответ

0 голосов
/ 20 сентября 2018

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

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

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

enter image description here

...