Як визначити найкращу точку відсічення та її довірчий інтервал за допомогою кривої 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, присвячений точно пошуку точки відсіку в такому типі аналізу. Насправді існує кілька методів визначення точки відсічення.

  • "КБ" (метод вигоди та вигоди);
  • "MCT" (мінімізує термін витрат на помилкову класифікацію);
  • "MinValueSp" (мінімальне значення, встановлене для Specificity);
  • "MinValueSe" (мінімальне значення, встановлене для чутливості);
  • "RangeSp" (діапазон значень, встановлений для Specificity);
  • "RangeSe" (діапазон значень, встановлених для чутливості);
  • "ValueSp" (значення, встановлене для Specificity);
  • "ValueSe" (значення, встановлене для чутливості);
  • "MinValueSpSe" (мінімальне значення, встановлене для специфічності та чутливості);
  • "MaxSp" (максимізує специфічність);
  • "MaxSe" (максимізує чутливість);
  • "MaxSpSe" (максимально підвищує чутливість та специфічність одночасно);
  • "Max-SumSpSe" (максимізує суму чутливості та специфічності);
  • "MaxProdSpSe" (максимізує добуток чутливості та специфічності);
  • "ROC01" (мінімізує відстань між графіком ROC та точкою (0,1));
  • "SpEqualSe" (чутливість = специфічність);
  • "Юден" (індекс Юдена);
  • "MaxEfficiency" (максимальна ефективність або точність);
  • «Мінімакс» (мінімізує найчастішу помилку);
  • "AUC" (максимізує узгодження, яке є функцією AUC);
  • "MaxDOR" (максимізує діагностичний коефіцієнт шансів);
  • "MaxKappa" (максимізує індекс Kappa);
  • "MaxAccuracyArea" (максимально збільшує область точності);
  • "MinErrorRate" (мінімізує швидкість помилок);
  • "MinValueNPV" (мінімальне значення, встановлене для негативного прогнозного значення);
  • "MinValuePPV" (мінімальне значення, встановлене для позитивного прогнозного значення);
  • "MinValueNPVPPV" (мінімальне значення, встановлене для прогнозних значень);
  • "PROC01" (мінімізує відстань між графіком PROC та точкою (0,1));
  • "NPVEqualPPV" (від'ємне прогнозне значення = позитивне прогнозне значення);
  • "ValueDLR.Negative" (значення, встановлене для негативного діагностичного співвідношення ймовірності);
  • "ValueDLR.Positive" (значення, встановлене для позитивного діагностичного співвідношення ймовірності);
  • "MinPvalue" (мінімізує значення p, пов'язане зі статистичним тестом Chi-квадрата, який вимірює зв'язок між маркером і бінарним результатом, отриманим при використанні точки відсіку);
  • "СпостереженийPrev" (Найближче значення до спостережуваної поширеності);
  • "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 x такий же поганий, як і хибний додатний. (Це дасть вам модифікацію найближчої точки до ідеального кута.)


1
Точно правильно, що для отримання оптимального рішення потрібні зовнішні знання. Але функція втрат не зазначається з точки зору вище наведених величин, і оптимальне рішення виходить із передбачуваної ймовірності результату для окремого суб'єкта у поєднанні з функцією втрат.
Френк Харрелл

6

Візуалізуйте точність та обріз. Ви можете прочитати більше деталей у документації ROCR і дуже приємну презентацію з тієї ж.

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


1
Якщо ви придивитесь ближче до вихідного коду, я використав цей пакет і прочитав документацію до цього пакету. У нього немає інструментів для визначення правильних точок відсічення та "сірої зони"
Юрій Петровський

1
Я, безумовно, читаю ваш код, але не існує такого терміна, як "правильне відсічення", але сюжет Точність та відсічення може дати вам правильне розуміння. І за допомогою цього сюжету ви можете зрозуміти, як знайти обріз для максимальної точності.
Володимир Чупахін

2

Що важливіше - за цією кривою дуже мало точок даних. Коли ви все-таки вирішите, як ви збираєтеся робити компроміс з чутливістю / специфічністю, я б настійно рекомендую вам завантажувати криву та отриманий номер відсікання. Ви можете виявити, що у вашому оціненому найкращому розрізі багато невизначеностей.


1
Експеримент ще триває, тому я отримаю більше точок даних. Мене цікавить методологія (я думаю, що це однаково для будь-якого підрахунку точок даних). І я не знайшов жодного статистичного методу визначення "сірої зони", поки він широко використовується в тестах такого типу.
Юрій Петровський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.