TL; DR: lme4
optimasi tampaknya linier dalam jumlah parameter model secara default, dan jauh lebih lambat daripada glm
model yang setara dengan variabel dummy untuk grup. Apakah ada yang bisa saya lakukan untuk mempercepatnya?
Saya mencoba menyesuaikan model logit hierarkis yang cukup besar (~ baris 50k, 100 kolom, 50 grup). Memasukkan model logit normal ke data (dengan variabel dummy untuk grup) berfungsi dengan baik, tetapi model hierarkis tampaknya macet: fase optimisasi pertama selesai dengan baik, tetapi yang kedua melewati banyak iterasi tanpa perubahan apa pun dan tanpa berhenti .
EDIT: Saya menduga masalahnya terutama karena saya memiliki begitu banyak parameter, karena ketika saya mencoba mengatur maxfn
ke nilai yang lebih rendah itu memberikan peringatan:
Warning message:
In commonArgs(par, fn, control, environment()) :
maxfun < 10 * length(par)^2 is not recommended.
Namun, perkiraan parameter tidak berubah sama sekali selama optimasi, jadi saya masih bingung tentang apa yang harus dilakukan. Ketika saya mencoba mengatur maxfn
kontrol pengoptimal (meskipun ada peringatan), sepertinya hang setelah menyelesaikan optimasi.
Berikut beberapa kode yang mereproduksi masalah untuk data acak:
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)
Output ini:
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>
Saya mencoba pengaturan ncol
ke nilai-nilai lain, dan tampaknya jumlah iterasi yang dilakukan adalah (kurang-lebih) 40 per kolom. Jelas, ini menjadi sangat menyakitkan ketika saya menambahkan lebih banyak kolom. Apakah ada tweak yang bisa saya buat untuk algoritma optimasi yang akan mengurangi ketergantungan pada jumlah kolom?
glmer
ini sangat lambat, terutama untuk model yang memiliki struktur efek acak yang kompleks (misalnya, banyak lereng acak, efek acak silang, dll.). Saran pertama saya adalah untuk mencoba lagi dengan struktur efek acak yang disederhanakan. Namun, jika Anda mengalami masalah ini hanya dengan model intersepsi acak, masalah Anda mungkin hanya jumlah kasus, dalam hal ini Anda harus mencoba beberapa alat khusus untuk data besar.