Bagaimana menentukan titik cutoff terbaik dan interval kepercayaannya menggunakan kurva ROC di R?


51

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):

Kurva ROC

Pertanyaan saya adalah:

  1. Bagaimana menentukan titik batas untuk tes ini dan interval kepercayaannya di mana pembacaan harus dinilai ambigu?
  2. Apa cara terbaik untuk memvisualisasikan ini (menggunakan ggplot2)?

Grafik diberikan menggunakan ROCRdan ggplot2paket:

#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

Jawaban:


30

Terima kasih untuk semua yang menjawab pertanyaan ini. Saya setuju bahwa tidak ada jawaban dan kriteria yang benar yang sangat tergantung pada tujuan yang berdiri di belakang tes diagnostik tertentu.

Akhirnya saya menemukan paket R OptimalCutpoints yang didedikasikan tepat untuk menemukan titik cutoff dalam jenis analisis. Sebenarnya ada beberapa metode untuk menentukan cutoff point.

  • "CB" (metode biaya-manfaat);
  • "MCT" (meminimalkan Istilah Biaya Kesalahan Klasifikasi);
  • "MinValueSp" (nilai minimum yang ditetapkan untuk Spesifisitas);
  • "MinValueSe" (nilai minimum yang ditetapkan untuk Sensitivitas);
  • "RangeSp" (rentang nilai yang ditetapkan untuk Spesifisitas);
  • "RangeSe" (rentang nilai yang diatur untuk Sensitivitas);
  • "ValueSp" (nilai yang ditetapkan untuk Spesifisitas);
  • "ValueSe" (nilai yang ditetapkan untuk Sensitivitas);
  • "MinValueSpSe" (nilai minimum yang ditetapkan untuk Spesifisitas dan Sensitivitas);
  • "MaxSp" (memaksimalkan Spesifisitas);
  • "MaxSe" (memaksimalkan Sensitivitas);
  • "MaxSpSe" (memaksimalkan Sensitivitas dan Spesifisitas secara bersamaan);
  • "Max-SumSpSe" (memaksimalkan jumlah Sensitivitas dan Spesifisitas);
  • "MaxProdSpSe" (memaksimalkan produk Sensitivitas dan Spesifisitas);
  • "ROC01" (meminimalkan jarak antara plot dan titik ROC (0,1));
  • "SpEqualSe" (Sensitivitas = Spesifisitas);
  • "Youden" (Youden Index);
  • "MaxEfficiency" (memaksimalkan Efisiensi atau Akurasi);
  • "Minimax" (meminimalkan kesalahan paling sering);
  • "AUC" (memaksimalkan konkordansi yang merupakan fungsi dari AUC);
  • "MaxDOR" (memaksimalkan Rasio Peluang Diagnostik);
  • "MaxKappa" (memaksimalkan Kappa Index);
  • "MaxAccuracyArea" (memaksimalkan Area Akurasi);
  • "MinErrorRate" (meminimalkan Tingkat Kesalahan);
  • "MinValueNPV" (nilai minimum yang ditetapkan untuk Nilai Prediktif Negatif);
  • "MinValuePPV" (nilai minimum yang ditetapkan untuk Nilai Prediktif Positif);
  • "MinValueNPVPPV" (nilai minimum yang ditetapkan untuk Nilai Prediktif);
  • "PROC01" (meminimalkan jarak antara plot dan titik PROC (0,1));
  • "NPVEqualPPV" (Nilai Prediktif Negatif = Nilai Prediktif Positif);
  • "ValueDLR.Negative" (nilai yang ditetapkan untuk Rasio Kemungkinan Diagnostik Negatif);
  • "ValueDLR.Positive" (nilai yang ditetapkan untuk Rasio Kemungkinan Diagnostik Positif);
  • "MinPvalue" (meminimalkan nilai-p yang terkait dengan uji statistik Chi-squared yang mengukur hubungan antara marker dan hasil biner yang diperoleh dari penggunaan cutpoint);
  • "ObservedPrev" (Nilai terdekat dengan prevalensi yang diamati);
  • "MeanPrev" (Nilai terdekat dengan nilai rata-rata tes diagnostik);
  • "PrevalenceMatching" (Nilai yang diprediksi prevalensi praktis sama dengan prevalensi yang diamati).

Jadi sekarang tugas dipersempit untuk memilih metode yang paling cocok untuk setiap situasi.

Ada banyak opsi konfigurasi lain yang dijelaskan dalam dokumentasi paket termasuk beberapa metode penentuan interval kepercayaan dan deskripsi terperinci dari masing-masing metode.


18
Banyaknya metode merupakan tanda kesewenang-wenangan dari suatu cutoff. Dan karena sama sekali tidak tepat untuk menggunakan cutoff pada variabel input, dan hanya tepat untuk mencari cutoff (jika Anda harus) pada nilai prediksi keseluruhan, tidak jelas mengapa begitu banyak upaya dihabiskan untuk ini. Jika Anda menetapkan aturan keputusan optimal Bayes dengan fungsi kerugian semuanya akan diurus; tidak ada kurva ROC, tidak ada probabilitas mundur waktu seperti sensitivitas dan spesifisitas, tidak ada cutoff pada variabel input.
Frank Harrell

@ FrankHarrell Bisakah Anda menguraikan ini? "Jika Anda membuat aturan keputusan optimal Bayes dengan fungsi kerugian semuanya akan diurus." Di mana saya dapat menemukan lebih banyak literatur tentang ini?
Susu Hitam

1
Lihatlah literatur tentang keputusan optimal Bayes dan aturan penilaian yang tepat.
Frank Harrell

26

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


15

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.


7

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.)


1
Tepat sekali bahwa Anda membutuhkan pengetahuan eksternal untuk mendapatkan keputusan yang optimal. Tetapi fungsi kerugian tidak dinyatakan dalam jumlah di atas, dan keputusan optimal berasal dari probabilitas hasil yang diprediksi untuk subjek individu , ditambah dengan fungsi kerugian.
Frank Harrell

6

Visualisasikan akurasi versus cutoff. Anda dapat membaca lebih detail di dokumentasi ROCR dan presentasi yang sangat bagus dari yang sama.

masukkan deskripsi gambar di sini


1
Jika Anda melihat lebih dekat pada kode sumber saya telah menggunakan paket ini dan membaca dokumentasi untuk paket ini. Ia tidak memiliki alat untuk menentukan titik cutoff yang tepat dan "zona abu-abu"
Yuriy Petrovskiy

1
Saya pasti membaca kode Anda tetapi tidak ada istilah seperti "cutoff benar" tetapi plot Akurasi vs cutoff dapat memberi Anda wawasan yang benar. Dan menggunakan plot ini Anda bisa mengetahui cara menemukan cutoff untuk akurasi maksimum.
Vladimir Chupakhin

2

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.


1
Eksperimen masih berlangsung, jadi saya akan mendapatkan lebih banyak poin data. Saya tertarik pada metodologi (saya pikir itu sama untuk setiap hitungan poin data). Dan saya belum menemukan metode statistik untuk menentukan "zona abu-abu" sementara itu banyak digunakan dalam tes jenis tersebut.
Yuriy Petrovskiy
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.