TL; DR: lme4
optimizasyon varsayılan olarak model parametreleri sayısında lineer olarak görünmektedir ve bir yolu eşdeğer daha yavaş glm
gruplar için kukla değişkenlerle modeli. Hızlandırmak için yapabileceğim bir şey var mı?
Oldukça büyük bir hiyerarşik logit modeli (~ 50k satır, 100 sütun, 50 grup) sığdırmaya çalışıyorum. Verilere normal bir logit modeli takmak (grup için kukla değişkenlerle) iyi çalışır, ancak hiyerarşik model sıkışıyor gibi görünür: ilk optimizasyon aşaması tamamlanır, ancak ikincisi hiçbir şey değişmeden ve durmadan çok sayıda yinelemeden geçer .
EDIT: Sorunun temelde çok fazla parametreye sahip olduğundan şüpheleniyorum, çünkü maxfn
daha düşük bir değere ayarlamaya çalıştığımda bir uyarı veriyor:
Warning message:
In commonArgs(par, fn, control, environment()) :
maxfun < 10 * length(par)^2 is not recommended.
Ancak, parametre tahminleri optimizasyon boyunca hiç değişmiyor, bu yüzden ne yapacağım konusunda hala kafam karıştı. maxfn
Optimize edici kontrollerinde (uyarıya rağmen) ayarlamaya çalıştığımda , optimizasyonu bitirdikten sonra askıda gibi görünüyordu.
Rasgele veriler için sorunu yeniden üreten bazı kodlar şunlardır:
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)
Bu çıktılar:
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
Diğer değerlere ayarlamayı denedim ve yapılan yineleme sayısının sütun başına (yaklaşık) 40 olduğu anlaşılıyor. Açıkçası, daha fazla sütun eklediğim için bu büyük bir acı haline geliyor. Sütun sayısına bağımlılığı azaltacak optimizasyon algoritmasında yapabileceğim ince ayarlar var mı?
glmer
özellikle karmaşık rastgele etkiler yapısına sahip modeller için oldukça yavaştır (örneğin, birçok rastgele eğim, çapraz rastgele efektler, vb.). İlk önerim basitleştirilmiş rastgele etkiler yapısıyla tekrar denemek olacaktır. Ancak, bu sorunu yalnızca rasgele kesişme modeliyle yaşıyorsanız, sorununuz sadece vaka sayısı olabilir, bu durumda büyük veriler için uzmanlaşmış bazı araçları denemeniz gerekir.