Inserimento di un GLM Poisson in R - problemi con tariffe e conteggi


11

Attualmente sto lavorando a un progetto che coinvolge GLM (e infine GAM) di alcuni dati di conteggio nel tempo. Normalmente lo farei in SAS, ma sto cercando di passare a R, e ho ... problemi.

Quando inserisco un GLM per contare i dati usando quanto segue:

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

Ottengo:

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

Ignora per un momento l'esecuzione o la mancanza del modello stesso, per lo più giocando con la sintassi e simili a questo punto.

Tuttavia, quando provo ad adattare i dati sui tassi (conteggi / giorni-persona) e utilizzo un offset in questo modo: cdi_model <- glm(count_rate ~ exposure + covariate + months + offset(log(pd)), data=test, family = poisson)

Ricevo più di 50 avvisi, tutti "1: In dpois (y, mu, log = TRUE): non intero x = 0,002082" ecc. Questo è più di uno per ogni osservazione (ce ne sono solo 30 nel set di dati).

Inoltre, l'adattamento del modello sembra andare al piatto. Uscita come segue:

 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

Nonostante ciò, se tracciamo il tasso previsto rispetto ai dati effettivi, l'adattamento non sembra molto peggio e la stima dell'effetto reale non sembra cambiare molto.

Qualcuno ha un'idea di cosa sta succedendo - o se tutto sta andando bene e mi manca qualcosa a causa dell'inesperienza?

Risposte:


17

Quando aggiungi l'offset non è necessario (e non dovresti) calcolare anche il tasso e includere l'esposizione.

Non so se questa sia la causa degli errori, ma se l'esposizione per caso è di giorni lavorativi pd, allora la variabile dipendente dovrebbe essere countse l'offset dovrebbe essere log(pd), in questo modo:

cdi_model <- glm(counts ~ covariate + months + offset(log(pd)), 
                 data=test, family = poisson)

(+1) A volte ho visto epidemiologi chiamare qualsiasi esposizione indipendente di interesse "esposizione" (ad esempio "esposizione al fumo di sigarette"). Ma buona cattura, non dovresti assolutamente usare il tasso come variabile dipendente.
Andy W,

Avrei indovinato che la variabile "mesi" è la durata dell'esposizione, ma il principio sarebbe lo stesso.
Aniko,

@Aniko Immagino che lo scopriremo presto. Stavo pensando che se è ragionevole pensare a un tasso come (counts/thing)allora il modello log log è quasi sempre counts ~ ... + offset(log(thing)). E mentre stiamo indovinando le cose, prevedo anche che log(pd) == exposure...
Coniugateprior

Per chiarire alcune cose - Andy W è corretto. "L'esposizione" è in realtà una variabile di interesse indipendente (in questo caso un cambiamento di politica). I mesi sono solo "mesi dalla data X" per consentire un certo controllo delle tendenze nei dati.
Fomite,

@ConjugatePrior Quando si utilizza il modello nella risposta, l'output del modello non dovrebbe essere in una velocità? L'esecuzione sembra mettere tutto fuori come un conteggio grezzo nonostante l'inclusione dell'offset. O c'è un altro passo che mi manca?
Fomite,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.