Redémarrer l’estimation du modèle à effets mixtes avec des valeurs précédemment estimées

J’utilise lmer() dans le package lme4 pour estimer les modèles à effets mixtes. Cela fonctionne bien, mais je veux maintenant exécuter le processus d’estimation pour un nombre fixe d’itérations, puis reprendre le processus en spécifiant les valeurs de départ, calculées par le dernier processus d’estimation.

Selon l’aide de ?lmer c’est possible, en définissant les arguments:

  • start – ce sont les nouvelles valeurs de départ, et selon l’aide, on peut extraire la valeur du slot ST d’un modèle ajusté et les utiliser, c’est-à-dire utiliser x@ST
  • maxiter – fourni comme argument nommé pour control

Donc, par exemple, supposons que je veuille ajuster un lme utilisant les données de l’ iris , on peut essayer ceci:

 library(lme4) # Fit model with limited number of iterations frm <- "Sepal.Length ~ Sepal.Width | Species" x <- lmer(frm, data=iris, verbose=TRUE, control=list(maxIter=1), model=FALSE) # Capture starting values for next set of iterations start <- list(ST=x@ST) # Update model twoStep <- lmer(frm, data=iris, verbose=TRUE, control=list(maxIter=100), model=TRUE, start=start) 

Cela marche. Jetez un coup d’oeil à la sortie, où la première colonne est le REML, c’est-à-dire le maximum de vraisemblance de l’effet aléatoire. Notez en particulier que le REML dans le modèle 2 commence là où le modèle 1 se termine:

 > x  # Capture starting values for next set of iterations > start  # Update model > twoStep <- lmer(frm, data=iris, + verbose=TRUE, control=list(maxIter=100), model=TRUE, + start=start) 0: 204.22878: 0.518239 1.01025 0.205835 1: 201.51667: 0.610272 2.00277 0.286049 2: 201.46706: 0.849203 1.94906 0.358809 3: 201.44614: 0.932371 1.88581 0.482423 4: 201.39421: 1.00909 1.71078 0.871824 5: 201.36543: 1.00643 1.60453 1.01663 6: 201.31066: 1.00208 1.35520 1.27524 7: 201.28458: 1.08227 1.22335 1.35147 8: 201.24330: 1.50333 0.679759 1.31698 9: 201.11881: 1.95760 0.329767 0.936047 

Cependant, lorsque j’ai une valeur différente de maxIters cela ne fonctionne plus:

 x <- lmer(frm, data=iris, verbose=TRUE, control=list(maxIter=3), model=FALSE) start <- list(ST=x@ST) twoStep <- lmer(frm, data=iris, verbose=TRUE, control=list(maxIter=100), model=TRUE, start=start) 

Notez que la valeur REML redémarre à 264 , soit le début:

 > x  # Capture starting values for next set of iterations > start  # Update model > twoStep <- lmer(frm, data=iris, + verbose=TRUE, control=list(maxIter=100), model=TRUE, + start=start) 0: 264.60572: 0.230940 0.0747853 0.00000 1: 204.22878: 0.518238 1.01025 0.205835 2: 201.94075: 0.00000 1.51757 -1.18259 3: 201.71473: 0.00000 1.69036 -1.89803 4: 201.64641: 0.00000 1.82159 -2.44144 5: 201.63698: 0.00000 1.88282 -2.69497 6: 201.63649: 0.00000 1.89924 -2.76298 7: 201.63649: 4.22291e-08 1.90086 -2.76969 8: 201.63649: 4.22291e-08 1.90086 -2.76969 

Question: Comment redémarrer de manière fiable lmer() avec les valeurs de départ obtenues à partir d’un modèle précédemment ajusté?


Informations sur la session:

 packageVersion("lme4") [1] '0.999999.2' 

C’était un bug confirmé dans lme4 et selon les commentaires

J’ai enregistré un problème sur github.com/lme4/lme4/issues/55 – Andrie juil. 2 ’13 à 15:42

Cela devrait être corrigé maintenant pour lmer (mais pas pour glmer, qui est légèrement plus compliqué). – Ben Bolker 14 juillet

C’était à l’époque où la version était <0.99999911-6; lme4 sur CRAN a des versions> 1.0-4 depuis le 21 septembre 2013.