更新: 2012-09-24 21:50:27
生態学のデータ解析 - lmer()雑
質問: AIC の値などはどうやって取りだすか?
(いただいた質問)
glmなどの結果のオブジェクトからは
res <- glm(...)
res$aic
などとしてAICや係数を単独で取り出せていたのですが、lmerでは同じように 取り出すことができないよいようです。
結果objectの構造がどうなっているのかよくわからず、どうやって取り出せばいい のか模索しています。何か方法があるのでしょうか。
(回答) R を起動して
library(lme4)} example(lmer)
すると lmer() の example が実行されて fm1, fm2 というところに lmer() の結果が入ります.
この fm1 からどう情報をとるか? を考えてみましょう.
回答1: generic function を適用する
coef(fm1) AIC(logLik(fm1))
回答2: summary() の「スロット」をみる
s1 <- summary(fm1) slotNames(s1)
とするとずらずらラベルがでますから,それを参考にして
s1@coefs s1@coefs[, "Estimate"] s1@AICtab s1@AICtab$AIC
とすればいろいろな値が得られます.
- 「スロット」については RjpWiki 内の間瀬さんの解説「S4 クラスとメソッド入門 を読んでください
質問: random effects のはいりかたの違い?
(いただいた質問)
Rのhelp(lmer)を見てみると、例として以下のものがあります。
(fm1 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy))
(fm2 <- lmer(Reaction ~ Days + (1|Subject) + (0+Days|Subject), sleepstudy))
このデータはくり返し測定になっているのだと思うのですが、この中の
(Days | Subject)
(1 | Subject) + (0+Days | Subject)
の " | " という表現は、helpでは "The vertical bar character "|" separates an expression for a model matrix and a grouping factor." となっています。
これは(Days | Subject)であれば、「Daysの効果を見ます がSubjectごとに見てください」といったことでしょうか? そうするとその次の(1 | Subject) + (0+Days | Subject)はどう 読めばよいのでしょうか。
(回答) これは R 自身に教えてもらえばよいのです.
library(lme4) example(lmer)
すると次のような出力が得られます (参照: help(lmer)).
前者の (Days|Subject) に関しては
lmer> (fm1 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy))
Linear mixed-effects model fit by REML
Formula: Reaction ~ Days + (Days | Subject)
Data: sleepstudy
AIC BIC logLik MLdeviance REMLdeviance
1754 1770 -872 1752 1744
Random effects:
Groups Name Variance Std.Dev. Corr
Subject (Intercept) 610.8 24.72
Days 35.1 5.92 0.067
Residual 655.1 25.59
number of obs: 180, groups: Subject, 18
Fixed effects:
Estimate Std. Error t value
(Intercept) 251.41 6.82 36.9
Days 10.47 1.55 6.8
Correlation of Fixed Effects:
(Intr)
Days -0.137
と出力されるので,Random effects をみればわかるように, Subject (被験者) ごとに (Intercept) と Days に random effects が入るわけですが,これらのあいだに相関 (Corr) があることがわかると思います. このことから,(Intercept) と Days の random effects の 「事前分布」が多変量正規分布 (random effects なのでとうぜん平均はゼロ) であり, しかも分散・共分散を自由に選べるものなっています.
ranef(fm1) (参照: help(ranef)) の出力はこうなります.
> ranef(fm1)
An object of class "ranef.lmer"
[[1]]
(Intercept) Days
308 2.27135 9.19670
309 -40.38259 -8.62231
310 -38.94034 -5.45219
330 23.66564 -4.81006
331 22.23913 -3.06629
332 9.03250 -0.27098
333 16.82778 -0.22148
334 -7.22561 1.07338
335 -0.35032 -10.74921
337 34.87840 8.63021
349 -25.18986 1.16997
350 -13.05004 6.61075
351 4.56976 -3.01385
352 20.85390 3.53761
369 3.27443 0.87238
370 -25.58660 4.81795
371 0.80490 -0.98778
372 12.30756 1.28520
一方で,
後者の Dayes+(0+Days|Subject) に関しては
lmer> (fm2 <- lmer(Reaction ~ Days + (1|Subject) + (0+Days|Subject), sleepstudy))
Linear mixed-effects model fit by REML
Formula: Reaction ~ Days + (1 | Subject) + (0 + Days | Subject)
Data: sleepstudy
AIC BIC logLik MLdeviance REMLdeviance
1752 1764 -872 1752 1744
Random effects:
Groups Name Variance Std.Dev.
Subject (Intercept) 627.5 25.05
Subject Days 35.9 5.99
Residual 653.6 25.57
number of obs: 180, groups: Subject, 18; Subject, 18
Fixed effects:
Estimate Std. Error t value
(Intercept) 251.41 6.89 36.5
Days 10.47 1.56 6.7
Correlation of Fixed Effects:
(Intr)
Days -0.184
と出力されるので,今回の Random effects は Corr がありません.
つまり,fm2 でも
Subject (被験者) ごとに (Intercept) と Days に random effects
が入るわけですが,
それぞれの事前分布が独立した (一変量) 正規分布 (やはり平均ゼロ)
であり,それぞれの分散が自由に選べるものなっています.
とうぜん (Intercept) と Days の事前分布の共分散はゼロです.
ranef(fm2) の出力はこうなります.
> ranef(fm2)
An object of class "ranef.lmer"
[[1]]
(Intercept)
308 1.51280
309 -40.37300
310 -39.18013
330 24.51820
331 22.91380
332 9.22173
333 17.15568
334 -7.45153
335 0.57854
337 34.76718
349 -25.75365
350 -13.86458
351 4.91581
352 20.92856
369 3.25858
370 -26.47508
371 0.90561
372 12.42146
[[2]]
Days
308 9.32346
309 -8.59929
310 -5.38792
330 -4.96853
331 -3.19384
332 -0.30846
333 -0.28714
334 1.11596
335 -10.90592
337 8.62771
349 1.28059
350 6.75632
351 -3.07510
352 3.51228
369 0.87306
370 4.98367
371 -1.00529
372 1.25845