mcmcsamp関数を使用した分散の事後シミュレーション


8

mcmcsamp()関数を使用したlmer()モデルの分散コンポーネントの事後シミュレーションを取得したいと思います。実行する方法 ?

たとえば、以下は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

今私はmcmcsamp()を実行します:

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

残差分散のシミュレーションは「シグマ」ノードに格納されると予想していましたが、これは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 

同様に、他の分散コンポーネントのシミュレーションが「ST」ノードに保存されることを期待していましたが、同様の結果が得られました。

回答:


4

短めの答えは

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

固定効果と変量効果と残差分散のチェーンをデータフレームの形式で抽出する必要があります。

例えば:

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

残念ながら、このベクトルは分散成分の有用な名前を取得しません。使用できます

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

これを修正するには(最後のステップで位置をハードコーディングする代わりに、で何かを行うことができます-1:(length(fixef(fm2)))

この回答の他の部分は、mcmcsampチェーンの動作についていくつかの深刻な疑問/質問があることですが、私はリストから外して対応します。 //www.math.mcmaster.ca/~bolker/R/misc/mcmcsampex.pdf

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.