Как определить лучшую точку отсечения и ее доверительный интервал, используя кривую ROC в R?


51

У меня есть данные теста, который можно использовать для различения нормальных и опухолевых клеток. Согласно кривой ROC это выглядит хорошо для этой цели (площадь под кривой составляет 0,9):

Кривая ROC

Мои вопросы:

  1. Как определить точку отсечки для этого теста и его доверительный интервал, где показания следует оценивать как неоднозначные?
  2. Каков наилучший способ визуализировать это (используя ggplot2)?

График отображается с использованием ROCRи ggplot2пакетов:

#install.packages("ggplot2","ROCR","verification") #if not installed yet
library("ggplot2")
library("ROCR")
library("verification")
d <-read.csv2("data.csv", sep=";")
pred <- with(d,prediction(x,test))
perf <- performance(pred,"tpr", "fpr")
auc <-performance(pred, measure = "auc")@y.values[[1]]
rd <- data.frame(x=perf@x.values[[1]],y=perf@y.values[[1]])
p <- ggplot(rd,aes(x=x,y=y)) + geom_path(size=1)
p <- p + geom_segment(aes(x=0,y=0,xend=1,yend=1),colour="black",linetype= 2)
p <- p + geom_text(aes(x=1, y= 0, hjust=1, vjust=0, label=paste(sep = "", "AUC = ",round(auc,3) )),colour="black",size=4)
p <- p + scale_x_continuous(name= "False positive rate")
p <- p + scale_y_continuous(name= "True positive rate")
p <- p + opts(
            axis.text.x = theme_text(size = 10),
            axis.text.y = theme_text(size = 10),
            axis.title.x = theme_text(size = 12,face = "italic"),
            axis.title.y = theme_text(size = 12,face = "italic",angle=90),
            legend.position = "none",
            legend.title = theme_blank(),
            panel.background = theme_blank(),
            panel.grid.minor = theme_blank(), 
            panel.grid.major = theme_line(colour='grey'),
            plot.background = theme_blank()
            )
p

data.csv содержит следующие данные:

x;group;order;test
56;Tumor;1;1
55;Tumor;1;1
52;Tumor;1;1
60;Tumor;1;1
54;Tumor;1;1
43;Tumor;1;1
52;Tumor;1;1
57;Tumor;1;1
50;Tumor;1;1
34;Tumor;1;1
24;Normal;2;0
34;Normal;2;0
22;Normal;2;0
32;Normal;2;0
25;Normal;2;0
23;Normal;2;0
23;Normal;2;0
19;Normal;2;0
56;Normal;2;0
44;Normal;2;0

Ответы:


30

Спасибо всем, кто ответил на этот вопрос. Я согласен с тем, что не может быть единого правильного ответа, и критерии в значительной степени зависят от целей, стоящих за определенным диагностическим тестом.

Наконец, я нашел R-пакет OptimalCutpoints, предназначенный именно для нахождения предельной точки при таком типе анализа. На самом деле существует несколько методов определения точки отсечки.

  • «CB» (метод рентабельности);
  • «MCT» (сводит к минимуму срок затрат на неклассификацию);
  • «MinValueSp» (минимальное значение, установленное для Specificity);
  • «MinValueSe» (минимальное значение, установленное для чувствительности);
  • «RangeSp» (диапазон значений, установленных для Specificity);
  • «RangeSe» (диапазон значений, установленных для чувствительности);
  • «ValueSp» (значение, установленное для Specificity);
  • «ValueSe» (значение, установленное для чувствительности);
  • «MinValueSpSe» (минимальное значение, установленное для специфичности и чувствительности);
  • «MaxSp» (максимизирует специфичность);
  • «MaxSe» (максимизирует чувствительность);
  • «MaxSpSe» (максимизирует чувствительность и специфичность одновременно);
  • «Max-SumSpSe» (максимизирует сумму чувствительности и специфичности);
  • «MaxProdSpSe» (максимизирует продукт чувствительности и специфичности);
  • «ROC01» (минимизирует расстояние между графиком ROC и точкой (0,1));
  • «SpEqualSe» (чувствительность = специфичность);
  • "Youden" (индекс Youden);
  • «MaxEfficiency» (максимизирует эффективность или точность);
  • «Минимакс» (минимизирует наиболее частую ошибку);
  • «AUC» (максимизирует соответствие, которое является функцией AUC);
  • «MaxDOR» (максимизирует диагностический коэффициент вероятности);
  • «МаксКаппа» (максимизирует индекс Каппа);
  • «MaxAccuracyArea» (максимизирует область точности);
  • «MinErrorRate» (минимизирует частоту появления ошибок);
  • «MinValueNPV» (минимальное значение, установленное для отрицательного прогнозирующего значения);
  • «MinValuePPV» (минимальное значение, установленное для положительного прогнозирующего значения);
  • «MinValueNPVPPV» (минимальное значение, установленное для прогнозных значений);
  • «PROC01» (минимизирует расстояние между графиком PROC и точкой (0,1));
  • «NPVEqualPPV» (отрицательное прогнозирующее значение = положительное прогнозирующее значение);
  • «ValueDLR.Negative» (значение, установленное для отрицательного отношения вероятности диагностики);
  • «ValueDLR.Positive» (значение, установленное для положительного отношения вероятности диагностики);
  • «MinPvalue» (минимизирует значение p, связанное со статистическим критерием хи-квадрат, который измеряет связь между маркером и двоичным результатом, полученным при использовании точки отсечения);
  • «ObservedPrev» (наиболее близкое значение к наблюдаемой распространенности);
  • «MeanPrev» (Ближайшее значение к среднему значению диагностического теста);
  • «PrevalenceMatching» (значение, для которого прогнозируемая распространенность практически равна наблюдаемой распространенности).

Поэтому теперь задача сводится к выбору метода, который лучше всего подходит для каждой ситуации.

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


18
Огромное количество методов является признаком произвольности среза. А так как совершенно неуместно использовать отсечки для входных переменных и только уместно искать отсечение (если необходимо) для общего прогнозируемого значения, неясно, почему на это тратится столько усилий. Если вы установили правило оптимального решения Байеса с функцией потерь, обо всем позаботятся; нет кривой ROC, нет вероятностей обратного времени, таких как чувствительность и специфичность, нет предельных значений для входных переменных.
Фрэнк Харрелл

@FrankHarrell Не могли бы вы уточнить это? «Если вы установите оптимальное байесовское правило принятия решения с функцией потерь, обо всем позаботятся». Где я могу найти больше литературы по этому вопросу?
Черное молоко

1
Посмотрите на литературу по оптимальным решениям Байеса и по правильным правилам подсчета очков.
Фрэнк Харрелл

26

На мой взгляд, есть несколько вариантов отключения. Вы можете по-разному оценивать чувствительность и специфичность (например, может быть, для вас более важно иметь высокочувствительный тест, даже если это означает, что у вас низкий специфический тест. Или наоборот).

Если чувствительность и специфичность имеют для вас одинаковую важность, одним из способов расчета порогового значения является выбор этого значения, которое минимизирует евклидово расстояние между вашей кривой ROC и верхним левым углом вашего графика.

Другим способом является использование значения, которое максимизируется (чувствительность + специфичность - 1) в качестве предела.

К сожалению, у меня нет ссылок на эти два метода, поскольку я узнал их от профессоров или других статистиков. Я только слышал, ссылаясь на последний метод как «индекс Юдена» [1]).

[1] https://en.wikipedia.org/wiki/Youden%27s_J_statistic


15

Не поддавайтесь искушению найти отсечение. Если у вас нет предварительно заданной функции полезности / потерь / затрат, отсечение оказывается перед лицом принятия оптимального решения. И кривая ROC не имеет отношения к этой проблеме.


7

Говоря математически, вам нужно решить еще одно условие для отсечения.

Вы можете перевести @ Андреа точку зрения: «использовать внешние знания о основной проблеме».

Пример условия:

  • для этого приложения нам нужна чувствительность> = x и / или специфичность> = y.

  • ложное отрицание в 10 раз хуже ложного срабатывания. (Это даст вам модификацию ближайшей точки к идеальному углу.)


1
Совершенно верно, что вам нужны внешние знания, чтобы получить оптимальное решение. Но функция потерь не указана в терминах вышеуказанных величин, и оптимальное решение исходит из прогнозируемой вероятности исхода для отдельного субъекта в сочетании с функцией потерь.
Фрэнк Харрелл

6

Визуализируйте точность по сравнению с отсечкой. Вы можете прочитать более подробную информацию в документации ROCR и очень хорошая презентация из того же.

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


1
Если вы посмотрите ближе на исходный код, я использовал этот пакет и прочитал документацию к этому пакету. У него нет инструментов для определения правильных точек среза и «серой зоны»
Юрий Петровский

1
Я определенно прочитал ваш код, но не существует такого термина, как «правильная отсечка», но график Точность и отсечка может дать вам правильное понимание. И используя этот график, вы можете выяснить, как найти отсечение для максимальной точности.
Владимир Чупахин

2

Что более важно - за этой кривой очень мало точек данных. Когда вы решите, как вы хотите добиться компромисса между чувствительностью и специфичностью, я настоятельно рекомендую вам запустить кривую и полученное число отсечений. Вы можете обнаружить, что в вашем предполагаемом наилучшем сечении много неопределенности.


1
Эксперимент еще продолжается, поэтому я получу больше данных. Я интересуюсь методологией (думаю, она одинакова для любого количества точек данных). И я не нашел никакого статистического метода определения «серой зоны», хотя он широко используется в тестах такого типа.
Юрий Петровский
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.