У меня есть данные теста, который можно использовать для различения нормальных и опухолевых клеток. Согласно кривой ROC это выглядит хорошо для этой цели (площадь под кривой составляет 0,9):
Мои вопросы:
- Как определить точку отсечки для этого теста и его доверительный интервал, где показания следует оценивать как неоднозначные?
- Каков наилучший способ визуализировать это (используя
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
источник
На мой взгляд, есть несколько вариантов отключения. Вы можете по-разному оценивать чувствительность и специфичность (например, может быть, для вас более важно иметь высокочувствительный тест, даже если это означает, что у вас низкий специфический тест. Или наоборот).
Если чувствительность и специфичность имеют для вас одинаковую важность, одним из способов расчета порогового значения является выбор этого значения, которое минимизирует евклидово расстояние между вашей кривой ROC и верхним левым углом вашего графика.
Другим способом является использование значения, которое максимизируется (чувствительность + специфичность - 1) в качестве предела.
К сожалению, у меня нет ссылок на эти два метода, поскольку я узнал их от профессоров или других статистиков. Я только слышал, ссылаясь на последний метод как «индекс Юдена» [1]).
[1] https://en.wikipedia.org/wiki/Youden%27s_J_statistic
источник
Не поддавайтесь искушению найти отсечение. Если у вас нет предварительно заданной функции полезности / потерь / затрат, отсечение оказывается перед лицом принятия оптимального решения. И кривая ROC не имеет отношения к этой проблеме.
источник
Говоря математически, вам нужно решить еще одно условие для отсечения.
Вы можете перевести @ Андреа точку зрения: «использовать внешние знания о основной проблеме».
Пример условия:
для этого приложения нам нужна чувствительность> = x и / или специфичность> = y.
ложное отрицание в 10 раз хуже ложного срабатывания. (Это даст вам модификацию ближайшей точки к идеальному углу.)
источник
Визуализируйте точность по сравнению с отсечкой. Вы можете прочитать более подробную информацию в документации ROCR и очень хорошая презентация из того же.
источник
Что более важно - за этой кривой очень мало точек данных. Когда вы решите, как вы хотите добиться компромисса между чувствительностью и специфичностью, я настоятельно рекомендую вам запустить кривую и полученное число отсечений. Вы можете обнаружить, что в вашем предполагаемом наилучшем сечении много неопределенности.
источник