Ajustando um modelo misto de Poisson GLM com uma inclinação aleatória e interceptação

9

Atualmente, estou trabalhando em uma série de modelos de séries temporais de Poisson tentando estimar o efeito de uma alteração na forma como as contagens foram obtidas (alternando de um teste de diagnóstico para outro) enquanto controlo outras tendências ao longo do tempo (digamos, um aumento geral no incidência de doença). Eu tenho dados para vários sites diferentes.

Embora eu também tenha mexido com GAMs, ajustei uma série de GLMs bem básicos com as tendências de tempo neles, e depois reuni os resultados. O código para isso seria algo parecido com isto no SAS:

PROC GENMOD data=work.data descending;
  model counts = dependent_variable time time*time / link=log dist = poisson;
run;

ou isso em R:

glm(counts ~ dependent_variable + time + time*time, family="poisson")

Em seguida, pegue essas estimativas e agrupe-as nos vários sites. Também foi sugerido que eu tente usar um modelo misto de Poisson com uma inclinação aleatória e interceptar para cada site, em vez de agrupar. Então, essencialmente, você teria o efeito fixo de variable_variable, depois um efeito aleatório para a interceptação e o tempo (ou, idealmente, o tempo e o tempo ^ 2, embora eu entenda que fica um pouco cabeludo).

Meu problema é que não tenho idéia de como ajustar um desses modelos, e parece que os modelos mistos são onde a documentação de todos fica subitamente muito opaca. Alguém tem uma explicação simples (ou código) sobre como ajustar o que estou procurando e o que procurar?

Fomite
fonte

Respostas:

14

Em R:

library(lme4)
lmer(counts ~ dependent_variable + (1+time|ID), family="poisson")

Nesse caso, e esse código se encaixa no modelo YiPoisson(λi)

log(λi)=β0+β1Xi+ηi1+ηi2t

onde é , é e é . são efeitos fixos e são efeitos aleatórios cujas variações são estimadas pelo modelo.Xidependent_variablettimeiIDβ0,β1ηi1,ηi2

Aqui está um exemplo com alguns dados simulados rapidamente, em que as variações aleatórias do efeito são realmente 0, a covariável não tem efeito, todo resultado é e cada indivíduo é visto 10 vezes às vezes .t = 1 , . . . , 10Poisson(1)t=1,...,10

x = rnorm(100)
t = rep(1:10,each=10)
ID = rep(1:10,10)
y = rpois(100,1)
g <- lmer(y ~ x + (1+t|ID), family="poisson")
summary(g)
Generalized linear mixed model fit by the Laplace approximation 
Formula: y ~ x + (1 + t | ID) 
   AIC   BIC logLik deviance
 108.8 121.9 -49.42    98.85
Random effects:
 Groups Name        Variance  Std.Dev. Corr   
 ID     (Intercept) 0.0285038 0.168831        
        t           0.0027741 0.052669 -1.000 
Number of obs: 100, groups: ID, 10

Fixed effects:
            Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.09078    0.11808  -0.769    0.442
x            0.13670    0.08845   1.546    0.122

Correlation of Fixed Effects:
  (Intr)
x -0.127

Um ponto de cautela - a Std.Dev.coluna é apenas a raiz quadrada da Variancecoluna, NÃO o erro padrão da estimativa de variância!

Macro
fonte
E é ηi1 que resulta na interceptação aleatória?
Fomite
ηi1 é a interceptação aleatória, sim.
Macro
Obrigado pela resposta - mais uma pergunta. Em alguns GLMs, alguns dos sites se beneficiam muito com o prazo de ^ 2. Parece que a maioria das pessoas identifica um ou dois efeitos aleatórios - quão desagradável será um terceiro em termos de computação?
Fomite
Bem, no exemplo simulado acima, que tinha apenas 100 observações e 10 grupos, adicionando o terceiro efeito aleatório (digitando g <- lmer(y ~ x + (1+t+I(t^2)|ID), family="poisson")), aumentou o tempo de computação de cerca de 0,75 segundos para 11 segundos. À medida que o tamanho da amostra aumenta, o aumento no tempo de computação provavelmente também aumenta.
Macro
11
@andrea, isso refletiria a crença de que há uma tendência secular no conjunto de dados - não assumi a priori que isso fazia sentido. Se as unidades eram pessoas e eram idade, certamente concordo que um efeito fixo no tempo fazia muito sentido, mas em outras situações, a inclinação no tempo seria mais uma direção aleatória que cada indivíduo está seguindo. É por isso que eu não incluem o efeito (e epigrad não perguntou como incluir o efeito do tempo fixo)t
Macro
2

No SAS:

proc glimmix data = yourdata ic = q;
    class id;
    model y = x / dist = poisson solution;
    random intercept t / subject = id;
run;

Mas é claro que existem muitas opções, mais ou menos úteis, para brincar.

Boscovich
fonte
Obrigado :) Infelizmente, parece que encalhei em questões de convergência, mas vou mexer com elas.
Fomite