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.