Apa saja pilihan dalam model regresi bahaya proporsional ketika residu Schoenfeld tidak baik?


15

Saya melakukan regresi bahaya proporsional Cox dalam menggunakan R coxph, yang mencakup banyak variabel. Residu Martingale tampak hebat, dan residu Schoenfeld bagus untuk hampir semua variabel. Ada tiga variabel yang residunya Schoenfeld tidak rata, dan sifat dari variabel tersebut sedemikian rupa sehingga masuk akal bahwa mereka dapat bervariasi dengan waktu.

Ini adalah variabel yang saya tidak benar-benar tertarik, sehingga membuat mereka strata akan baik-baik saja. Namun, semuanya adalah variabel kontinu, bukan variabel kategorikal. Jadi saya melihat strata bukan rute yang layak *. Saya telah mencoba membangun interaksi antara variabel dan waktu, seperti yang dijelaskan di sini , tetapi kami mendapatkan kesalahan:

  In fitter(X, Y, strats, offset, init, control, weights = weights,  :
  Ran out of iterations and did not converge

Saya bekerja dengan hampir 1000 titik data, dan saya bekerja dengan setengah lusin variabel dengan masing-masing faktor, jadi rasanya kami mendorong batas bagaimana data ini dapat diiris dan dipotong dadu. Sayangnya, semua model sederhana yang pernah saya coba dengan lebih sedikit variabel yang dimasukkan jelas lebih buruk (mis. Residu Schoenfeld lebih buruk untuk lebih banyak variabel).

Apa saja pilihan saya? Karena saya tidak peduli dengan variabel-variabel yang berperilaku buruk ini, saya ingin mengabaikan output mereka, tetapi saya menduga itu bukan interpretasi yang valid!

* Satu kontinu, satu bilangan bulat dengan kisaran lebih dari 100, dan satu bilangan bulat dengan kisaran 6. Mungkin binning?


2
Bagaimana dengan menggunakan model Cox diperpanjang dengan interaksi waktu untuk variabel dependen waktu?
Kirk

Bagaimana dengan mempertimbangkan opsi kovariat yang vaying waktu (seperti -tvc- di Stata)?
Carlo Lazzaro

Jawaban:


1

Cara paling elegan adalah dengan menggunakan model survival parametrik (Gompertz, Weibull, Exponential, ...) jika Anda memiliki gambaran seperti apa bahaya garis dasar itu nantinya.

Jika Anda ingin tetap dengan model Cox Anda, Anda dapat mengambil model cox diperpanjang dengan koefisien tergantung waktu . Ingatlah bahwa ada juga model cox yang diperpanjang dengan kovarian yang tergantung waktu - ini tidak menyelesaikan masalah Anda!

Untuk R lihat di sini: http://cran.r-project.org/web/packages/survival/vignettes/timedep.pdf


1

Beberapa ide -

1) Coba pendekatan pemodelan Royston-Parmar misalnya http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0047804 dan referensi di dalamnya. Kami sudah mendapatkan hasil yang bermanfaat dengannya.

2) Pemusatan dan standarisasi variabel kontinu dapat berguna secara numerik.

3) Dalam banyak model dengan faktor dengan banyak level ada beberapa level di mana pada dasarnya tidak ada data. Menggabungkan level untuk menghapus ini, tetapi berdasarkan kriteria substantif yang baik, bisa sangat membantu.

Semoga berhasil!


1

Jika menggunakan interaksi dengan waktu yang mendasarinya tidak berhasil, Anda dapat mencoba fungsi langkah (untuk informasi lebih lanjut lihat skrip Therneau 2016 e).

Fungsi langkah dikelompokkan dalam koefisien spesifik pada interval tertentu. Setelah melihat residu Schoenfeld yang diplot untuk kovariat bermasalah (yaitu plot(cox.zph(model.coxph))), Anda perlu memeriksa secara visual di mana garis berubah sudut. Cobalah untuk menemukan satu atau dua titik di mana beta tampaknya sangat berbeda. Misalkan ini terjadi pada waktu 10 dan 20. Jadi kita akan membuat data menggunakan survSplit()dari survivalpaket yang akan membuat bingkai data untuk pengelompokan model data tertentu pada waktu yang disebutkan di atas:

step.data <- survSplit(Surv(t1, t2, event) ~ 
                      x1 + x2,
                      data = data, cut = c(10, 20), episode = "tgroup")

Dan kemudian jalankan cox.phmodel dengan stratafungsi sebagai interaksi dengan variabel bermasalah (seperti berinteraksi dengan waktu, jangan tambahkan efek utama untuk waktu atau strata):

> model.coxph2 <- coxph(Surv(t1, t2, event) ~ 
                          x1 + x2:strata(tgroup), data = step.data)

Dan itu akan membantu.

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.