Pemodelan angka kematian menggunakan regresi Poisson

8

Saya sedang memeriksa tren (antara 1998 dan 2011) dalam tingkat kematian di antara pasien dengan penyakit Crohn. Setiap pasien (kasus) telah dimasukkan selama tahun 1998 hingga 2011. Pada saat inklusi, setiap pasien telah dicocokkan dengan kontrol yang sehat dengan usia dan jenis kelamin yang sama. Saya menganalisis tren tingkat kematian. Ketika melakukan ini secara langsung, tanpa penyesuaian, saya memperoleh angka kematian yang berfluktuasi dari waktu ke waktu, yang mungkin karena fakta bahwa individu yang termasuk tahun tertentu tidak dapat dibandingkan dengan yang termasuk tahun yang lain. Karena itu saya bertujuan untuk menyesuaikan tingkat kematian. Saya berharap bahwa angka kematian pada kedua kelompok (kasus dan kontrol) akan menurun seiring waktu dan kesenjangan antara kasus dan kontrol akan menyempit berturut-turut.

Ide saya adalah melakukan penyesuaian melalui regresi Poisson. Data saya ada di tingkat individu. Saya ingin mendapatkan satu perkiraan tingkat kejadian (per 1000 orang-tahun) untuk kasus dan kontrol setiap tahun dari 1998 hingga 2011. Waktu bertahan hidup akan dimasukkan sebagai offset dalam model. Hal serupa telah dilakukan di sini .

Saya telah memasang 200 baris pertama dari kumpulan data saya, yang terdiri dari 1500 orang. Ini datanya . Penjelasan variabel:

  • mati = jika pasien meninggal atau tidak selama tindak lanjut
  • surv = waktu bertahan hidup dalam beberapa hari
  • agegroup = kelompok umur yang dikategorikan (4 kelompok)
  • jenis kelamin = pria / wanita
  • diagnosis = 0 untuk kontrol sehat, 1 untuk penyakit Crohns
  • umur = umur dalam tahun
  • inclusion_year = tahun inklusi dalam penelitian

Apa yang saya coba sejauh ini? Saya sudah mencoba menyesuaikan model Poisson dengan fungsi glm () di R, menggunakan pengamatan individu (log (surv) sebagai offset), tetapi saya juga menerima kesalahan atau tidak tahu bagaimana cara menggunakan cocok. Saya juga mengumpulkan data menjadi beberapa kelompok, dan kemudian menganalisis jumlah kematian dalam glm (); ketika saya menggunakan kecocokan untuk mendapatkan angka kejadian, saya hanya bisa mendapatkan angka untuk usia / agegroup dan jenis kelamin tertentu (seperti yang perlu ditentukan dalam fungsi prediksi ()).

Saya sangat menghargai beberapa saran statistik dan contoh pengkodean, yang dapat dilakukan pada set data terlampir.

Frank49
sumber
1
Saya menerima kesalahan atau tidak tahu cara menggunakan cocok Apa kesalahan? Saya menggunakan Stata agar sesuai dengan data Anda dan mereka baik-baik saja (selain Anda hanya memasukkan satu jenis kelamin dalam 50 kasus pertama dan jenis kelamin harus dikeluarkan.)
Penguin_Knight
1
Apakah Anda dapat memperoleh satu tingkat kejadian (per 1000 orang tahun) untuk setiap tahun dalam kasus dan kontrol? Apakah Anda mengumpulkan data ke dalam kelompok atau apakah Anda cocok dengan model dengan data tingkat individu? Berikut adalah kode dan hasilnya (menggunakan pengamatan individu):> glm (mati ~ usia + jenis kelamin + faktor (diagnosis) + faktor (inclusion_year), offset = log (surv), data = data1, keluarga = "poisson") Kesalahan di contrasts<-( *tmp*, value = contr.funs [1 + isOF [nn]]): kontras dapat diterapkan hanya pada faktor dengan 2 level atau lebih
Frank49
Jika Anda memerlukan nilai prediksi untuk kasus dan kontrol secara terpisah di setiap tahun, Anda mungkin perlu memasukkan serangkaian diagnosis*inclusion_yearistilah interaksi. Jika Anda hanya menggunakan model saat ini, jumlah case hanya akan berbeda dengan beta diagnosis, konstan sepanjang tahun karena tidak diperbolehkan untuk berinteraksi. Setelah itu, prediksi akan menjadi pengganti saja. Saya tidak terlalu pilih-pilih jadi saya hanya akan subs usia rata-rata dan persentase laki-laki.
Penguin_Knight
Terima kasih Penguin_knight untuk balasan Anda, saya sangat menghargainya! Meskipun saya masih tidak tahu apakah saya harus menggabungkan data ke dalam kelompok atau menyesuaikan model dengan data tingkat individu?
Frank49
Saya bingung dengan pengaturan ini. Bagaimana Anda berurusan dengan penyensoran?
Glen_b -Reinstate Monica

Jawaban:

2

Tanpa melihat dataset (tidak tersedia) sepertinya sebagian besar benar. Yang menyenangkan tentang regresi Poisson adalah bahwa mereka dapat memberikan tarif ketika digunakan seperti yang disarankan. Satu hal yang mungkin perlu diingat adalah bahwa mungkin ada penyebaran berlebihan di mana Anda harus beralih ke regresi binomial negatif (lihat paket MASS).

Regresi Poisson tidak peduli apakah data terkumpul atau tidak, tetapi dalam praktiknya data tidak teragregasi lemah dan dapat menyebabkan beberapa kesalahan yang tidak terduga. Perhatikan bahwa Anda tidak dapat memiliki surv == 0untuk semua kasus. Saat saya menguji perkiraannya sama:

set.seed(1)
n <- 1500
data <- 
  data.frame(
    dead = sample(0:1, n, replace = TRUE, prob = c(.9, .1)),
    surv = ceiling(exp(runif(100))*365),
    gender = sample(c("Male", "Female"), n, replace = TRUE),
    diagnosis = sample(0:1, n, replace = TRUE),
    age = sample(60:80, n, replace = TRUE),
    inclusion_year = sample(1998:2011, n, replace = TRUE)
  )

library(dplyr)
model <- 
  data %>% 
  group_by(gender, 
           diagnosis,
           age,
           inclusion_year) %>% 
  summarise(Deaths = sum(dead),
            Person_time = sum(surv)) %>%
  glm(Deaths ~ gender + diagnosis + I(age - 70) + I(inclusion_year - 1998) + offset(log(Person_time/10^3/365.25)), 
      data = . , family = poisson)

alt_model <- glm(dead ~ gender + diagnosis + I(age - 70) + I(inclusion_year - 1998) + offset(log(surv/10^3/365.25)), 
    data = data , family = poisson)
sum(coef(alt_model) - coef(model))
# > 1.779132e-14
sum(abs(confint(alt_model) - confint(model)))
# > 6.013114e-11

Saat Anda mendapatkan nilai, penting untuk memusatkan variabel agar intersep dapat ditafsirkan, misalnya:

> exp(coef(model)["(Intercept)"])
(Intercept) 
    51.3771

Dapat diartikan sebagai tingkat dasar dan kemudian kovariat adalah rasio tingkat. Jika kami ingin tarif dasar setelah 10 tahun:

> exp(coef(model)["(Intercept)"] + coef(model)["I(inclusion_year - 1998)"]*10)
(Intercept) 
     47.427 

Saya saat ini memodelkan tahun inklusi sebagai variabel tren tetapi Anda mungkin harus memeriksa nonlinier dan kadang-kadang berguna untuk melakukan kategorisasi poin waktu. Saya menggunakan pendekatan ini dalam artikel ini:

D. Gordon, P. Gillgren, S. Eloranta, H. Olsson, M. Gordon, J. Hansson, dan KE Smedby, “Tren waktu dalam kejadian melanoma kulit oleh lokasi anatomi terperinci dan pola paparan radiasi ultraviolet: populasi retrospektif studi berbasis, ”Melanoma Res., vol. 25, tidak. 4, hlm. 348–356, Agustus 2015.

Max Gordon
sumber