Saya memiliki data tes yang dapat digunakan untuk membedakan sel normal dan sel tumor. Menurut kurva ROC terlihat bagus untuk tujuan ini (area di bawah kurva adalah 0,9):
Pertanyaan saya adalah:
- Bagaimana menentukan titik batas untuk tes ini dan interval kepercayaannya di mana pembacaan harus dinilai ambigu?
- Apa cara terbaik untuk memvisualisasikan ini (menggunakan
ggplot2
)?
Grafik diberikan menggunakan ROCR
dan ggplot2
paket:
#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 berisi data berikut:
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
sumber
Menurut pendapat saya, ada beberapa opsi cut-off. Anda mungkin memiliki sensitivitas dan spesifisitas yang berbeda (misalnya, mungkin bagi Anda itu lebih penting untuk memiliki tes sensitivitas tinggi walaupun ini berarti memiliki tes spesifik yang rendah. Atau sebaliknya).
Jika sensitivitas dan spesifisitas memiliki kepentingan yang sama bagi Anda, salah satu cara menghitung cut-off adalah memilih nilai yang meminimalkan jarak Euclidean antara kurva ROC Anda dan sudut kiri atas grafik Anda.
Cara lain adalah menggunakan nilai yang memaksimalkan (sensitivitas + spesifisitas - 1) sebagai cut-off.
Sayangnya, saya tidak memiliki referensi untuk dua metode ini karena saya telah mempelajarinya dari profesor atau ahli statistik lainnya. Saya hanya mendengar menyebut metode yang terakhir sebagai 'Youden's index' [1]).
[1] https://en.wikipedia.org/wiki/Youden%27s_J_statistic Anda
sumber
Tahan godaan untuk menemukan jalan pintas. Kecuali jika Anda memiliki fungsi utilitas / kerugian / biaya yang ditentukan sebelumnya, cutoff terbang di hadapan pengambilan keputusan yang optimal. Dan kurva ROC tidak relevan dengan masalah ini.
sumber
Secara matematis, Anda perlu kondisi lain untuk menyelesaikan cut-off.
Anda dapat menerjemahkan titik @ Andrea ke: "menggunakan pengetahuan eksternal tentang masalah yang mendasarinya".
Contoh kondisi:
untuk aplikasi ini, kita memerlukan sensitivitas> = x, dan / atau spesifisitas> = y.
false negative adalah 10 x seburuk false positive. (Itu akan memberi Anda modifikasi dari titik terdekat ke sudut ideal.)
sumber
Visualisasikan akurasi versus cutoff. Anda dapat membaca lebih detail di dokumentasi ROCR dan presentasi yang sangat bagus dari yang sama.
sumber
Yang lebih penting - sangat sedikit titik data di belakang kurva ini. Ketika Anda memutuskan bagaimana Anda akan membuat tradeoff sensitivitas / spesifisitas, saya sangat menyarankan Anda untuk mem-bootstrap kurva dan jumlah cutoff yang dihasilkan. Anda mungkin menemukan bahwa ada banyak ketidakpastian dalam perkiraan cutoff terbaik Anda.
sumber