Bagaimana melakukan analisis ROC dalam R dengan model Cox

10

Saya telah membuat beberapa model regresi Cox dan saya ingin melihat seberapa baik kinerja model-model ini dan saya pikir mungkin kurva ROC atau statistik-c mungkin berguna seperti artikel ini:

JN Armitage och JH van der Meulen, "Mengidentifikasi komorbiditas pada pasien bedah yang menggunakan data administratif dengan Royal College of Surgeons Charlson Score", British Journal of Surgery, vol. 97, num. 5, dtk 772-781, May 2010.

Armitage menggunakan regresi logistik tetapi saya bertanya-tanya apakah mungkin menggunakan model dari paket survival, survivalROC memberikan petunjuk bahwa ini mungkin, tetapi saya tidak tahu bagaimana cara membuatnya dengan regresi Cox biasa.

Saya akan berterima kasih jika seseorang akan menunjukkan kepada saya bagaimana melakukan analisis ROC pada contoh ini:

library(survival)
data(veteran)

attach(veteran)
surv <- Surv(time, status)
fit <- coxph(surv ~ trt + age + prior, data=veteran)
summary(fit)

Jika memungkinkan, saya akan sangat menghargai output c-statika mentah dan grafik yang bagus

Terima kasih!

Memperbarui

Terima kasih banyak atas jawabannya. @Dwin: Saya hanya ingin memastikan bahwa saya sudah memahaminya dengan benar sebelum memilih jawaban Anda.

Perhitungannya seperti yang saya pahami sesuai saran DWin:

library(survival)
library(rms)
data(veteran)

fit.cph <- cph(surv ~ trt + age + prior, data=veteran, x=TRUE, y=TRUE, surv=TRUE)

# Summary fails!?
#summary(fit.cph)

# Get the Dxy
v <- validate(fit.cph, dxy=TRUE, B=100)
# Is this the correct value?
Dxy = v[rownames(v)=="Dxy", colnames(v)=="index.corrected"]

# The c-statistic according to the Dxy=2(c-0.5)
Dxy/2+0.5

Saya tidak terbiasa dengan fungsi validasi dan bootstrap tetapi setelah melihat prof. Jawaban Frank Harrel di sini, di R-help, saya pikir itu mungkin cara untuk mendapatkan Dxy. Bantuan untuk menyatakan validasi:

... Korelasi peringkat Dxy Somers 'akan dihitung pada setiap sampel ulang (ini membutuhkan waktu sedikit lebih lama daripada statistik berbasis kemungkinan). Nilai yang sesuai dengan baris Dxy sama dengan 2 * (C - 0,5) di mana C adalah indeks-C atau probabilitas konkordansi.

Saya kira saya sebagian besar bingung dengan kolom. Saya pikir nilai yang diperbaiki adalah yang harus saya gunakan tetapi saya belum benar-benar memahami hasil validasi:

      index.orig training    test optimism index.corrected   n
Dxy      -0.0137  -0.0715 -0.0071  -0.0644          0.0507 100
R2        0.0079   0.0278  0.0037   0.0242         -0.0162 100
Slope     1.0000   1.0000  0.2939   0.7061          0.2939 100
...

Dalam pertanyaan R-help saya telah memahami bahwa saya harus memiliki "surv = TRUE" di cph jika saya memiliki strata tetapi saya tidak yakin apa tujuan dari parameter "u = 60" dalam fungsi validasi. Saya akan berterima kasih jika Anda dapat membantu saya memahami ini dan memastikan bahwa saya tidak melakukan kesalahan.

Max Gordon
sumber
2
Saya mungkin akan melihat paket rms dan cph()perintahnya.
chl
2
index.correctedadalah apa yang harus ditekankan. Ini adalah perkiraan kemungkinan kinerja masa depan. u=60tidak diperlukan validatekarena Anda tidak memiliki strata. Jika Anda memiliki strata, kurva kelangsungan hidup dapat melintas, dan Anda perlu menentukan titik waktu tertentu untuk mendapatkan area ROC umum.
Frank Harrell

Jawaban:

2

@chl telah menunjuk ke jawaban spesifik untuk pertanyaan Anda. Fungsi paket 'rms' cphakan menghasilkan Somers-D yang dapat diubah secara sepele menjadi indeks-c. Namun, Harrell (yang memperkenalkan indeks-c untuk praktik biostatistik) menganggap ini tidak bijaksana sebagai strategi umum untuk menilai tindakan prognostik, karena memiliki daya rendah untuk diskriminasi di antara alternatif. Alih-alih mengandalkan literatur bedah untuk panduan metodologis Anda, akan lebih bijaksana untuk mencari akumulasi kebijaksanaan dalam teks Harrell, "Strategi Pemodelan Regresi" atau "Model Prediksi Klinis" Steyerberg.

DWIN
sumber
4
Terima kasih atas catatannya. Saya pikir dan tidak buruk untuk menggambarkan diskriminasi prediksi model tunggal yang ditentukan sebelumnya. Tetapi seperti yang Anda katakan, mereka tidak memiliki kekuatan untuk melakukan lebih dari itu. CDxyC
Frank Harrell
Terima kasih atas jawaban Anda, situasi saya adalah saya memiliki tiga skor berbeda yang ingin saya bandingkan dan lihat bagaimana hasilnya. Saya belum punya waktu untuk melihat bagian Somers-D dan saya akan kembali begitu saya punya waktu (saya melihat sekilas dan tidak menemukan sesuatu yang berguna). Saya juga memesan buku @FrankHarrell, "Strategi Pemodelan Regresi", ISBN 13: 978-0387952321, dan mudah-mudahan itu akan memandu saya dalam pilihan saya.
Max Gordon
2
Karena Dxy = 2 * (c- 0,5) perhitungan c yang diberikan Dxy harus sepele.
DWin
3

Bergantung pada kebutuhan Anda, menanamkan model di dalam model yang lebih besar dan melakukan kemungkinan rasio "chunk" untuk nilai tambah variabel tambahan akan memberi Anda tes yang kuat. Buku saya berbicara tentang indeks yang muncul dari pendekatan ini ("indeks kecukupan").χ2

Frank Harrell
sumber
+1 untuk membimbing saya ke arah yang benar. Saya baru saja selesai melakukan statistik-C dan skor yang lebih rinci yang saya lihat memiliki statistik-C 0,4365081 sementara yang lain memiliki 0,4414625 (saya kira saya harus menghitung 0,5-Dxy / 2 dalam kasus saya). Saya perlu waktu cukup lama melakukan perhitungan pada 140.000 sampel saya; Saya harus menurunkan bootstraps ke 10 dan saya tidak yakin apa dampaknya. Saya menantikan untuk membaca buku Anda (ada di pos) dan mudah-mudahan ini akan membantu saya memahami metodologi dengan lebih baik dan membandingkan statistik-C dengan indeks kecukupan.
Max Gordon
Baik. Tidak mudah untuk mengatakan apakah 0,44 vs 0,43 berarti banyak tanpa melihat distribusi nilai yang diprediksi.
Frank Harrell
Saya mengerti sulit mengomentari angka seperti itu. Saya akan mencoba melihat distribusi. Interpretasi utama saya tentang hasilnya adalah sangat sedikit yang dijelaskan oleh model saya dan meskipun ada perbedaan kecil itu mungkin tidak terlalu penting. Akan menarik apa yang diharapkan dalam pengaturan bertahan hidup - mencapai nilai 0,8 seperti yang mereka lakukan dalam analisis yang saya rujuk dalam pertanyaan saya tampaknya cukup jauh ... tapi sekali lagi kelangsungan hidup saya adalah kelangsungan hidup prostesis yang ditanamkan dan bukan kelangsungan hidup pasien. Mereka juga menggunakan regresi logistik yang mungkin mengubah estimasi.
Max Gordon
Regresi logistik tidak akan berfungsi jika waktu penting atau waktu tindak lanjut bervariasi antar subjek. Kembali ke pertanyaan awal, risiko yang diprediksi akan memiliki distribusi yang sempit jika variasi yang dijelaskan oleh model sangat sedikit.
Frank Harrell
Baru saja mendapatkan buku Anda ... Saya memiliki kunci cepat di bagian survival tetapi ketika saya mencoba studi kasus Anda di bab 20, tetapi saya mendapatkan kesalahan pada bagian impute (w, sz): 'variabel sz tidak memiliki atribut names () '. Saya mengikuti bab. 8: memuat dataframe dengan getHdata (prostat) (tidak dapat menemukan situs web dalam buku), apakah w <- transcan (~ sz + sg + ap + sbp + dbp + usia + wt + hg + ekg + pf + bm + hx, diimputasi = T, ditransformasikan = T, imcat = "tree", data = prostate) tapi saya tidak menemukan apa-apa tentang penamaan ...
Max Gordon