Simulations postérieures des variances avec la fonction mcmcsamp

8

Je voudrais obtenir les simulations postérieures des composantes de variance d'un modèle lmer () avec la fonction mcmcsamp (). Comment faire ?

Par exemple, ci-dessous est le résultat d'un ajustement lmer ():

> fit
Linear mixed model fit by REML
Formula: y ~ 1 + (1 | Part) + (1 | Operator) + (1 | Part:Operator)
   Data: dat
   AIC   BIC logLik deviance REMLdev
 97.55 103.6 -43.78    89.18   87.55
Random effects:
 Groups        Name        Variance Std.Dev.
 Part:Operator (Intercept) 2.25724  1.50241
 Part          (Intercept) 3.30398  1.81769
 Operator      (Intercept) 0.00000  0.00000
 Residual                  0.42305  0.65043
Number of obs: 25, groups: Part:Operator, 15; Part, 5; Operator, 3

Maintenant, je lance mcmcsamp ():

> mm <- mcmcsamp(fit, n=15000) 

Je m'attendais à ce que les simulations de la variance résiduelle soient stockées dans le nœud "sigma" mais cela ne semble pas correspondre aux résultats de lmer ():

> sigmasims <- mm@sigma[1,-(1:5000)]  # discard first 5000 simulations (burn-in)
> summary(sigmasims)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
 0.8647  1.4960  1.7040  1.7460  1.9480  3.7920 

De même, je m'attendais à ce que les simulations des autres composantes de la variance soient stockées dans le nœud "ST" mais j'obtiens une observation similaire.

Stéphane Laurent
la source

Réponses:

4

La réponse courte (ish) est que

as.data.frame(mm,type="varcov")

devrait extraire les chaînes pour les effets fixes et pour les effets aléatoires et les variances résiduelles sous la forme d'une base de données.

Par exemple:

library(lme4.0) ## I am using the r-forge version
fm2 <- lmer(Reaction ~ Days + (1|Subject) + 
    (0+Days|Subject), sleepstudy)
mm <- mcmcsamp(fm2,1000)
dd <- as.data.frame(mm,type="varcov")
burnin <- 100  ## probably unnecessary
summary(dd[-(1:burnin),])

Malheureusement, ce vecteur n'obtient pas de noms utiles pour les composantes de la variance. Vous pouvez utiliser

vnames <- c(names(getME(fm2,"theta")),"sigma^2")
names(dd)[3:5] <- vnames

pour y remédier (au lieu de coder en dur les positions à la dernière étape, vous pourriez faire quelque chose -1:(length(fixef(fm2))))

L'autre partie de cette réponse est que j'ai de sérieux doutes / questions sur le comportement des mcmcsampchaînes, mais je correspondrai hors liste: une discussion partielle / préliminaire (et peut-être erronée!) De ma confusion est publiée sur http: //www.math.mcmaster.ca/~bolker/R/misc/mcmcsampex.pdf .

Ben Bolker
la source