Posteriore Simulationen der Varianzen mit der Funktion mcmcsamp

8

Ich möchte die posterioren Simulationen der Varianzkomponenten eines lmer () -Modells mit der Funktion mcmcsamp () erhalten. Wie macht man ?

Im Folgenden sehen Sie beispielsweise das Ergebnis einer lmer () - Anpassung:

> 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

Jetzt starte ich mcmcsamp ():

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

Ich habe erwartet, dass die Simulationen der Restvarianz im "Sigma" -Knoten gespeichert sind, aber dies scheint nicht zu den Ergebnissen von lmer () zu passen:

> 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 

Ebenso habe ich erwartet, dass die Simulationen der anderen Varianzkomponenten im "ST" -Knoten gespeichert sind, aber ich bekomme eine ähnliche Beobachtung.

Stéphane Laurent
quelle

Antworten:

4

Die kurze (ish) Antwort lautet:

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

sollte die Ketten für die festen Effekte und für die Zufallseffekt- und Restvarianzen in Form eines Datenrahmens extrahieren.

Zum Beispiel:

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),])

Leider erhält dieser Vektor keine nützlichen Namen für die Varianzkomponenten. Sie können verwenden

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

um dies zu beheben (anstatt die Positionen im letzten Schritt fest zu codieren, könnten Sie etwas damit tun -1:(length(fixef(fm2))))

Der andere Teil dieser Antwort ist, dass ich einige ernsthafte Zweifel / Fragen zum Verhalten der mcmcsampKetten habe, aber ich werde außerhalb der Liste korrespondieren: Eine teilweise / vorläufige (und möglicherweise falsche!) Diskussion meiner Verwirrung ist unter http: //www.math.mcmaster.ca/~bolker/R/misc/mcmcsampex.pdf .

Ben Bolker
quelle