Dalam R cara menghitung nilai p untuk area di bawah ROC

12

Saya kesulitan menemukan cara untuk menghitung nilai-p untuk area di bawah karakteristik operator penerima (ROC). Saya memiliki variabel kontinu dan hasil tes diagnostik. Saya ingin melihat apakah AUROC signifikan secara statistik.

Saya menemukan banyak paket yang berhubungan dengan kurva ROC: pROC, ROCR, caTools, verifikasi, Epi. Tetapi bahkan setelah berjam-jam menghabiskan membaca dokumentasi dan pengujian, saya tidak dapat menemukan caranya. Saya pikir saya baru saja melewatkannya.

pengguna32530
sumber
1
Apa yang mungkin berarti bahwa area di bawah kurva menjadi 'signifikan'?
gung - Reinstate Monica
Saya ingin mengatakan pengujian jika nilai AUC berbeda secara statistik dari 0,5
user32530
Dari mana kurva ROC Anda berasal? Agaknya Anda menginginkan tes itu (misalnya, ada nilai p untuk model regresi logistik yang diambil secara keseluruhan).
gung - Reinstate Monica
Nah, data saya seperti berikut ini, saya memiliki tes standar yang membuat pengelompokan menjadi dengan / tanpa penyakit, dan saya ingin menemukan nilai cut-off untuk penentuan biologis dari sampel darah. Selain itu saya membutuhkan area di bawah kurva. Jadi tidak, saya tidak punya model regresi apa pun
user32530
Jadi, Anda memiliki beberapa tes yang dilakukan pada sampel darah yang diambil dari pasien, yang memberi Anda nomor; & Anda akan ingin menggunakan nomor itu untuk mengklasifikasikan jika pasien menderita penyakit tersebut. Saat ini, Anda memiliki satu set angka dari tes ini untuk satu set pasien di mana Anda mengetahui keadaan penyakit mereka yang sebenarnya. Apakah semua itu benar?
gung - Reinstate Monica

Jawaban:

12

Dalam situasi Anda, akan lebih baik untuk merencanakan kurva ROC, dan untuk menghitung area di bawah kurva itu, tetapi ini harus dianggap sebagai tambahan untuk analisis utama Anda, daripada analisis primer itu sendiri. Sebagai gantinya, Anda ingin mencocokkan model regresi logistik .

Model regresi logistik akan datang standar dengan tes model secara keseluruhan. (Sebenarnya, karena Anda hanya memiliki satu variabel, nilai-p itu akan sama dengan nilai-p untuk variabel hasil tes Anda.) Nilai-p itu adalah yang Anda kejar. Model ini akan memungkinkan Anda untuk menghitung probabilitas yang diprediksi dari pengamatan yang sedang sakit. Sebuah Karakteristik Receiver Operating memberitahu Anda bagaimana sensitivitas dan spesifisitas akan trade off, jika Anda menggunakan ambang batas yang berbeda untuk mengubah probabilitas diprediksi menjadi klasifikasi diprediksi. Karena probabilitas yang diprediksi akan menjadi fungsi variabel hasil tes Anda, ini juga memberi tahu Anda bagaimana mereka menukar jika Anda menggunakan nilai hasil tes yang berbeda sebagai ambang Anda.


Jika Anda tidak terlalu mengenal regresi logistik ada beberapa sumber yang tersedia di internet (selain halaman Wikipedia yang terhubung di atas):

gung - Pasang kembali Monica
sumber
Itu sangat mencerahkan. Terima kasih! Jadi saya cocok dengan model logistik glm binomial (logit). Lalu saya membandingkannya dengan model nol dan tes itu memberi saya nilai p yang saya cari?
user32530
Ya, itu harus dilakukan untuk Anda. LR akan membuat banyak hal lain menjadi mungkin juga, tetapi mungkin itu yang Anda butuhkan.
gung - Reinstate Monica
Jadi kodenya akan seperti berikut? GLM.1 <- glm (Grup ~ continuousVar, keluarga = binomial (logit), data = diagnostikData) ringkasan (GLM.1) GLM.2 <- glm (Grup ~ 1, keluarga = binomial (logit), data = diagnosticData) anova (GLM.2, GLM.1, test = "Chisq")
user32530
summary(GLM.1)harus memberi Anda apa yang Anda butuhkan, & saya pikir anova(GLM.1)akan mengujinya terhadap model nol w / o Anda benar-benar harus cocok juga. Tapi cara Anda pasti akan berhasil, ya.
gung - Reinstate Monica
9

Pada dasarnya Anda ingin menguji H0 = "AUC sama dengan 0,5".

Ini sebenarnya setara dengan mengatakan H0 = "Distribusi peringkat dalam dua kelompok adalah sama".

Yang terakhir adalah hipotesis nol dari uji Mann-Whitney (Wilcoxon) (lihat misalnya Gold, 1999 ).

Dengan kata lain, Anda dapat menggunakan tes Mann-Whitney-Wilcoxon dengan aman untuk menjawab pertanyaan Anda (lihat misalnya Mason & Graham, 2002 ). Inilah yang dilakukan oleh paket verifikasi yang disebutkan oleh Franck Dernoncourt.

Calimo
sumber
Mengapa menarik untuk menunjukkan bahwa prediksi tidak acak? Itu tidak menilai kegunaan.
Frank Harrell
1
@ Frankharrell Karena dalam banyak kasus prediksi Anda mungkin tidak lebih baik daripada acak - dalam hal ini manfaat yang Anda laporkan sebenarnya nol. Tentu, melaporkan interval kepercayaan dari tindakan kegunaan (sensitivitas dan spesifisitas) akan lebih bermanfaat. Tetapi menguji perbedaan antara dua kelompok adalah hal biasa dalam literatur klinis setidaknya (dan sebenarnya ada kelompok-kelompok yang sering tidak berbeda) dan saya melihat pengulas meminta secara khusus.
Calimo
Itu masuk akal IMHO kecil. Saya ingin tahu betapa bermanfaatnya sesuatu, bukan apakah itu lebih baik daripada hanya membalik koin.
Frank Harrell
Jika tidak lebih baik dari membalik koin, lalu mengapa Anda harus melalui semua pekerjaan itu? Balikkan koin.
Scott
4

Anda dapat menggunakan roc.area () dari verifikasi paket :

install.packages("verification")
library("verification")

# Data used from Mason and Graham (2002).
a<- c(1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990,
 1991, 1992, 1993, 1994, 1995)
d<- c(.928,.576, .008, .944, .832, .816, .136, .584, .032, .016, .28, .024, 0, .984, .952)

A<- data.frame(a,d)
names(A)<- c("year", "p2")

# For model without ties
roc.area(A$event, A$p2)

Itu akan kembali $p.value [1] 0.0069930071

Franck Dernoncourt
sumber
Terima kasih banyak, tapi saya tidak punya nilai c dan d. Saya memiliki tes standar yang membuat pengelompokan menjadi dengan / tanpa penyakit, dan saya ingin menemukan nilai cut-off untuk penentuan biologis dari sampel darah. Selain itu saya membutuhkan area di bawah kurva. Jadi tidak, saya tidak punya regresi. Saya memiliki variabel biner stdtest dan variabel kontinu nilai biologis
user32530
oh ok saya pikir Anda punya d, karena saya berasumsi Anda sudah memiliki kurva ROC.
Franck Dernoncourt
3
Biasanya merupakan kesalahan untuk mencari cutoff sewenang-wenang ketika hubungan yang sebenarnya dengan probabilitas penyakit lancar. Juga, menguji hipotesis nol bahwa area ROC adalah 0,5 adalah hipotesis yang cukup membosankan. Untuk sebagian besar prediksi, Anda peduli seberapa bagus prediksi itu, bukan apakah prediksi itu acak.
Frank Harrell
Tidak masalah, dan terima kasih, Frank Demoncourt, mungkin ada cara untuk mendapatkannya d.
user32530
Di bidang medis kadang-kadang mereka membutuhkan titik cutoff untuk membuat tes diagnosis. Dengan orang-orang yang ingin mereka temukan apakah subjeknya sakit atau tidak, tidak dapat memprediksi sesuatu. Kadang-kadang mereka perlu memotong biaya dengan tekad yang lebih murah untuk mengidentifikasi status penyakit.
user32530
0

Dua kurva ROC dapat dibandingkan dalam penggunaan pROC roc.test(). Ini juga menghasilkan nilai-p. Selain itu, menggunakan roc(..., auc=TRUE, ci=TRUE)akan memberi Anda interval kepercayaan yang lebih rendah dan lebih tinggi bersama dengan AUC dalam output sambil membuat objek ROC, yang mungkin berguna.

Berikut ini adalah contoh kode yang berfungsi yang menguji apakah mil per galon atau berat mobil merupakan prediktor yang lebih baik untuk jenis transmisi yang dilengkapi (otomatis atau manual):

library(pROC)
roc_object_1 <- roc(mtcars$am, mtcars$mpg, auc=T, ci=T) #gives AUC and CI
roc_object_2 <- roc(mtcars$am, mtcars$wt, auc=T, ci=T) #gives AUC and CI

roc.test(roc_object_1, roc_object_2) #gives p-value

Bobotnya adalah prediktor yang jauh lebih baik daripada konsumsi bahan bakar, tampaknya. Namun, ini membandingkan dua kurva, dan bukan kurva tunggal terhadap angka seperti 0,5. Melihat interval kepercayaan untuk melihat apakah itu berisi angka 0,5 memberitahu kita apakah itu berbeda secara signifikan, tetapi tidak menghasilkan nilai p.

naco
sumber
Apakah ini memberikan nilai-p juga?
Michael R. Chernick
Meskipun pertanyaannya ditanyakan secara khusus dalam hal R, kebijakan umum kami di sini adalah bahwa kami adalah statistik (pembelajaran mesin, dll) situs T&J. Dengan demikian, Q perlu memiliki konten statistik, & Sangat disarankan bahwa As tidak hanya disediakan dalam istilah khusus perangkat lunak. Mengingat hal itu, dapatkah Anda mengatakan lebih banyak tentang apa tes ini & bagaimana cara kerjanya, selain hanya menyebutkan bahwa tes tersebut ada di R & menunjukkan kode R untuknya?
gung - Reinstate Monica
Oke, saya akan memperbarui jawaban saya untuk mencerminkan latar belakang statistik
naco