lme4パッケージが更新されました。
今回は、大幅に仕様がかわったようです。
・計算アルゴリズムを改善して、より頑健になり、計算が早くなった。
・PQLが使えなくなった。
・引数のmethodがなくなった。
・glmer()という関数ができた。
・mcmcsamp()のサンプリング方法が変わった。
今回の更新で我々エンドユーザーが特に注意しなければいけないのは、methodでしょう。
尤度を求めるmethodは、正規分布の場合"REML"と"ML"、それ以外の分布では、"Laplace"と"PQL"でした。
しかしながらPQL法は、問題があり、あまり正確な推定をしないことが指摘されています。方法がそれしか使えなかった時代ならいざしらず、現在はglmmMLやlmerのようにLhaplaceやghq(glmmMLのみ)のようにPQLより正確で尤度を求める方法が実装されているので、あえてPQLを使う必要はないと思います。そのため、今回のバージョンでPQLが使えなくなったのだと思います。
で、正規分布のときREMLとMLはどうしていするかというと、
REML=TRUE
で指定するようです。デフォルトは、TRUE。FALSEにするとMLになります。
現状では、まだ引数methodは使えますが、warning messageがでます。
fm1 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy,method="ML")
Warning message:
In lmer(Reaction ~ Days + (Days | Subject), sleepstudy, method = "ML") :
Argument ‘methood’ is deprecated. Use ‘REML’ instead
おそらく、次に出るバージョンでは引数methodは使えなくなるので、もう使わない方向で行きましょう。
で、もうひとつglmer()について
結論からいうと現状では、あまり気にする必要はないと思います。
lmer()はLinear Mixed Model、つまり、正規分布のGLMM、
glmer()はGeneralized Mixed Model、正規分布以外のGLMMで、両者の関数を使い分けるようです。
しかしながら、lmer(,family=poisson)とglmer(,family=poisson)は全く同じ結果になります。
test1 <- lmer(round(Reaction) ~ Days + (Days|Subject),family=poisson, sleepstudy)
test2 <- glmer(round(Reaction) ~ Days + (Days|Subject),family=poisson, sleepstudy)
summary(test1)
summary(test2)
(出力結果略)
では、なんでglmer()がでてくるかというと、引数nAGQの存在です。
これは、よくわかりませんが、Gauss-Hermite approximationにおいて設定する値のようです。整数値を入力、デフォルトは1。
Gauss-Hermite approximationは、glmmML(そういえば、最近更新したようですね。なにがどうなったかわかりませんが)のmethod="ghq"でやる方法ですね。glmmMLのヘルプには、"Both methods are now fully adaptive."だそうです。以前のバージョンではちょっと書いてあることが違ったのですが。
で、もともと以前のlmerのバージョンでは、「Lhaplaceよりも正確な、method="AGQ"が選べるようになりますよ。まだ実装してないけど」と書いてあった気がするけど、現バージョンで、引数nAGQという形で実装されたのでしょう。
ということでnAGQをいじってみる。
test3<- glmer(round(Reaction) ~ Days + (Days|Subject),family=poisson,nAGQ=2, sleepstudy)
以下にエラー mer_finalize(ans, verbose) : Code not yet written
まだ実装されていないようです。
結論
現バージョンでは、lmer()を使って引数methodについて気にすれば(多分)問題なく使える。
過去のlmer研究
(1)自動akaike weightプログラム
(2)自動akaike weightプログラム2
(3)gaussian modelのp値
(4)AICについて
(5)lmerで多重比較
最近のコメント