TL; DR: l' lme4
optimisation semble être linéaire dans le nombre de paramètres du modèle par défaut, et est beaucoup plus lente qu'un glm
modèle équivalent avec des variables factices pour les groupes. Puis-je faire quelque chose pour l'accélérer?
J'essaie d'adapter un modèle logit hiérarchique assez grand (~ 50k lignes, 100 colonnes, 50 groupes). L'ajustement d'un modèle logit normal aux données (avec des variables factices pour le groupe) fonctionne bien, mais le modèle hiérarchique semble se coincer: la première phase d'optimisation se termine bien, mais la seconde passe par beaucoup d'itérations sans rien changer et sans s'arrêter .
EDIT: Je soupçonne que le problème est principalement dû au fait que j'ai beaucoup de paramètres, car lorsque j'essaie de définir maxfn
une valeur inférieure, cela donne un avertissement:
Warning message:
In commonArgs(par, fn, control, environment()) :
maxfun < 10 * length(par)^2 is not recommended.
Cependant, les estimations des paramètres ne changent pas du tout au cours de l'optimisation, donc je ne sais toujours pas quoi faire. Lorsque j'ai essayé de définir maxfn
les commandes de l'optimiseur (malgré l'avertissement), il semblait se bloquer après avoir terminé l'optimisation.
Voici un code qui reproduit le problème pour les données aléatoires:
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)
Cela produit:
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>
J'ai essayé de définir ncol
d'autres valeurs, et il semble que le nombre d'itérations effectuées soit (environ) 40 par colonne. Évidemment, cela devient une énorme douleur lorsque j'ajoute plus de colonnes. Y a-t-il des ajustements à apporter à l'algorithme d'optimisation qui réduiront la dépendance au nombre de colonnes?
glmer
est assez lent, en particulier pour les modèles qui ont une structure complexe d'effets aléatoires (par exemple, de nombreuses pentes aléatoires, des effets aléatoires croisés, etc.). Ma première suggestion serait d'essayer à nouveau avec une structure d'effets aléatoires simplifiée. Cependant, si vous rencontrez ce problème avec un modèle d'interceptions aléatoires uniquement, votre problème peut simplement être le nombre de cas, auquel cas vous devrez essayer des outils spécialisés pour les mégadonnées.