Menyesuaikan GLM Poisson dalam R - masalah dengan tarif vs jumlah

11

Saat ini saya sedang mengerjakan proyek yang melibatkan GLM (dan akhirnya GAM) dari beberapa data jumlah dari waktu ke waktu. Biasanya saya melakukan ini di SAS, tapi saya mencoba untuk pindah ke R, dan memiliki ... masalah.

Ketika saya cocok dengan GLM untuk menghitung data menggunakan yang berikut ini:

cdi_model <- glm(counts ~ exposure + covariate + month, data=test, family = poisson)

Saya mendapat:

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.9825  -0.7903  -0.1187   0.5717   1.7649  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  1.97563    0.20117   9.821  < 2e-16 ***
exposure     0.94528    0.30808   3.068  0.00215 ** 
covariate   -0.01317    0.28044  -0.047  0.96254    
months      -0.03203    0.01303  -2.458  0.01398 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 40.219  on 29  degrees of freedom
Residual deviance: 29.297  on 26  degrees of freedom
AIC: 137.7

Number of Fisher Scoring iterations: 5

Abaikan sejenak kinerja, atau ketiadaan model itu sendiri - sebagian besar bermain dengan sintaks dan sejenisnya pada saat ini.

Namun, ketika saya mencoba untuk menyesuaikan data tingkat (jumlah / orang-hari) dan menggunakan offset seperti: cdi_model <- glm(count_rate ~ exposure + covariate + months + offset(log(pd)), data=test, family = poisson)

Saya mendapatkan 50+ peringatan, semua "1: Di dpois (y, mu, log = TRUE): non-integer x = 0,002082" dll. Itu lebih dari satu untuk setiap pengamatan (hanya ada 30 dalam kumpulan data).

Selain itu, model yang pas sepertinya masuk ke pot. Output sebagai berikut:

 Deviance Residuals: 
       Min          1Q      Median          3Q         Max  
-0.0273656  -0.0122169   0.0002396   0.0072269   0.0258643  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)
(Intercept) -15.40110   15.12772  -1.018    0.309
exposure      0.84848   22.18012   0.038    0.969
covariate    -0.02751   21.31262  -0.001    0.999
months       -0.01889    0.95977  -0.020    0.984

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 0.0068690  on 29  degrees of freedom
Residual deviance: 0.0054338  on 26  degrees of freedom
AIC: Inf

Number of Fisher Scoring iterations: 9

Meskipun demikian, jika saya memplot laju prediksi terhadap data aktual, kecocokan tidak terlihat jauh lebih buruk, dan perkiraan efek aktual tampaknya tidak banyak berubah.

Adakah yang tahu apa yang sedang terjadi - atau jika semuanya berjalan dengan baik dan saya kehilangan sesuatu karena tidak berpengalaman?

Fomite
sumber

Jawaban:

17

Saat Anda menambahkan offset, Anda tidak perlu (dan tidak seharusnya) juga menghitung kurs dan menyertakan eksposur.

Saya tidak tahu apakah ini penyebab kesalahan, tetapi jika eksposur per kasus adalah hari orang pd, maka variabel dependen harus countsdan offset harus log(pd), seperti ini:

cdi_model <- glm(counts ~ covariate + months + offset(log(pd)), 
                 data=test, family = poisson)
conjugateprior
sumber
(+1) Kadang-kadang saya melihat ahli epidemiologi menyebut variabel bebas apa pun yang menarik sebagai "paparan" (misalnya, "paparan rokok merokok"). Tapi tangkapan yang bagus, Anda pasti tidak harus menggunakan tingkat sebagai variabel dependen.
Andy W
Saya akan menduga bahwa variabel 'bulan' adalah panjang paparan, tetapi prinsipnya akan sama.
Aniko
@Aniko kurasa kita akan segera tahu. Saya berpikir bahwa jika masuk akal untuk memikirkan tingkat (counts/thing)maka model log linear hampir selalu counts ~ ... + offset(log(thing)). Dan sementara kita menebak hal-hal kedua, saya juga memprediksi itu log(pd) == exposure...
conjugateprior
Untuk memperjelas beberapa hal - Andy W benar. "Paparan" sebenarnya merupakan variabel bebas minat (dalam hal ini perubahan kebijakan). Bulan hanya "bulan sejak tanggal X" untuk memungkinkan beberapa kontrol untuk tren dalam data.
Fomite
@ConjugatePrior Saat menggunakan model dalam jawaban Anda, bukankah seharusnya output dari model dalam tingkat? Menjalankannya tampaknya menempatkan semuanya sebagai hitungan mentah meskipun dimasukkannya offset. Atau ada langkah lain yang saya lewatkan?
Fomite