Кривая рабочих характеристик приемника (ROC) используется для оценки точности непрерывного измерения для прогнозирования бинарного результата. В медицине кривые ROC давно используются для оценки диагностических тестов в радиологии и общей диагностике. Кривые ROC также долгое время использовались в теории обнаружения сигналов.
Точность диагностического теста можно оценить, рассмотрев два возможных типа ошибок: ложноположительные и ложноотрицательные. Для непрерывного измерения, которое мы обозначаем как M, соглашение диктует, что положительный тест определяется как M, превышающий некоторый фиксированный порог c: M>c. Что касается бинарного результата, который мы обозначаем как D, то хорошим результатом теста является положительный результат теста у человека, у которого действительно есть заболевание: D=1. Плохой результат – положительный результат теста у человека, не страдающего заболеванием D=0.
Формально для фиксированного порогового значения с истинно положительная доля представляет собой вероятность положительного результата теста среди заболевшего населения:
TPF(c)=P{M>c|D=1}
а доля ложноположительных результатов — это вероятность положительного результата теста среди здорового населения:
FPF(c)=P{M>c|D=0}
Поскольку отсечка c обычно не фиксируется заранее, мы можем построить TPF в зависимости от FPF для всех возможных значений c. Это именно то, что представляет собой кривая ROC: FPF(c) по оси x и TPF(c) по оси y.
Пример кода на R:
boris@boris-All-Series:~/R-ROC$ cat attemptROC.R
library(plotROC)
library(ggplot2)
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)
test <- data.frame(D = D.ex, D.str = c("Healthy", "Ill")[D.ex + 1],
M1 = M1, M2 = M2, stringsAsFactors = FALSE)
basicplot <- ggplot(test, aes(d = D, m = M1)) + geom_roc(n.cuts = 0)
basicplot
Начинается с создания примера набора данных. Есть 2 маркера, один умеренно прогностический, а другой менее прогностический.
Затем используется функцию ggplot для определения эстетики и функцию geom_roc для добавления слоя кривой ROC. Функция geom_roc требует эстетики d для статуса болезни и m для маркера. Статус болезни не обязательно кодировать как 0/1, но если это не так, stat_roc предполагает (с предупреждением), что наименьшее значение в порядке сортировки означает отсутствие болезни. stat_roc и geom_roc связаны по умолчанию, при этом stat выполняет базовые вычисления эмпирической кривой ROC, а geom состоит из слоя кривой ROC.
Ubuntu 20.04.4 RStudio Console
boris@boris-All-Series:~/R-ROC$ cat attemptMulty.R
library(plotROC)
library(ggplot2)
set.seed(2529)
D.ex <- rbinom(500, size = 1, prob = .5)
M1 <- rnorm(500, mean = D.ex, sd = .65)
M2 <- rnorm(500, mean = D.ex, sd = 1.5)
longtest <- melt_roc(test, "D", c("M1", "M2"))
head(longtest)
ggplot(longtest, aes(d = D, m = M, color = name)) + geom_roc(n.cuts = 0) + style_roc()
No comments:
Post a Comment