TL; DR:lme4
最適化は、デフォルトではモデルパラメータの数に直線的であるように思われる、とある道遅く同等以上glm
のグループのためのダミー変数を持つモデル。高速化するためにできることはありますか?
私はかなり大きな階層型ロジットモデル(〜5万行、100列、50グループ)に適合させようとしています。データへの通常のロジットモデルのフィッティング(グループのダミー変数を使用)は正常に機能しますが、階層モデルはスタックしているように見えます:最初の最適化フェーズは正常に完了しますが、2番目は何も変更せずに停止せずに多くの反復を実行します。
編集:私は問題が主に非常に多くのパラメータを持っていると疑っています、maxfn
より低い値に設定しようとすると警告が表示されるためです:
Warning message:
In commonArgs(par, fn, control, environment()) :
maxfun < 10 * length(par)^2 is not recommended.
ただし、最適化の過程でパラメーターの推定値はまったく変化しないため、何をすべきかについてはまだ混乱しています。maxfn
(警告にもかかわらず)オプティマイザーコントロールに設定しようとしたときに、最適化が終了した後にハングしたように見えました。
ランダムデータの問題を再現するコードを次に示します。
library(lme4)
set.seed(1)
SIZE <- 50000
NGRP <- 50
NCOL <- 100
test.case <- data.frame(i=1:SIZE)
test.case[["grouping"]] <- sample(NGRP, size=SIZE, replace=TRUE, prob=1/(1:NGRP))
test.case[["y"]] <- sample(c(0, 1), size=SIZE, replace=TRUE, prob=c(0.05, 0.95))
test.formula = y ~ (1 | grouping)
for (i in 1:NCOL) {
colname <- paste("col", i, sep="")
test.case[[colname]] <- runif(SIZE)
test.formula <- update.formula(test.formula, as.formula(paste(". ~ . +", colname)))
}
print(test.formula)
test.model <- glmer(test.formula, data=test.case, family='binomial', verbose=TRUE)
この出力:
start par. = 1 fn = 19900.78
At return
eval: 15 fn: 19769.402 par: 0.00000
(NM) 20: f = 19769.4 at 0 <other numbers>
(NM) 40: f = 19769.4 at 0 <other numbers>
ncol
他の値に設定しようとしましたが、行われた反復回数は列ごとに(約)40回であるようです。明らかに、列を追加するとこれは大きな痛みになります。列数への依存を減らす最適化アルゴリズムに対して調整できる調整はありますか?
glmer
は、特に複雑なランダム効果構造(たとえば、多くのランダムな勾配、交差したランダム効果など)を持つモデルの場合、非常に遅くなります。私の最初の提案は、単純化されたランダム効果構造で再試行することです。ただし、ランダムインターセプトモデルのみでこの問題が発生している場合、問題は単にケースの数である可能性があります。その場合、ビッグデータ専用のツールを試す必要があります。