69 votes

Le redémarrage de l'estimation du modèle à effets mixtes avec les valeurs précédemment estimées

Je suis à l'aide d' lmer() dans le paquet lme4 de l'estimation à effets mixtes modèles. Cela fonctionne bien, mais maintenant je veux lancer le processus d'estimation pour un nombre fixe d'itérations, puis de reprendre le processus en spécifiant les valeurs de départ, tel que calculé par le dernier processus d'estimation.

Conformément à 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 que l'on peut extraire de la valeur dans la fente ST à partir d'un modèle ajusté et d'utiliser ces derniers, c'est à dire utiliser x@ST
  • maxiter - fourni comme argument nommé à l' control

Ainsi, par exemple, supposons que je veux pour s'adapter à un lme à l'aide de l' iris données, 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)

Les travaux de cette. Jetez un oeil à la sortie, où la première colonne est la REML, c'est à dire de l'effet aléatoire du maximum de vraisemblance. Remarque surtout que le REML dans le modèle 2 commence là où le modèle 1 se termine:

> x <- lmer(frm, data=iris, 
+           verbose=TRUE, control=list(maxIter=1), model=FALSE)
  0:     264.60572: 0.230940 0.0747853  0.00000
  1:     204.22878: 0.518239  1.01025 0.205835
  1:     204.22878: 0.518239  1.01025 0.205835

> # 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)
  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, quand j'ai une autre valeur 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 le REML valeur redémarre au 264, c'est à dire le début:

> x <- lmer(frm, data=iris, 
+           verbose=TRUE, control=list(maxIter=3), model=FALSE)
  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
  3:     201.71473:  0.00000  1.69036 -1.89803

> # 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)
  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 puis-je redémarrer de manière fiable lmer() avec des valeurs de départ obtenus à partir d'un déjà monté modèle?


Les informations de Session:

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

3voto

Thell Points 2772

C'était un bogue confirmé dans lme4 et par les commentaires

J'ai connecté un problème github.com/lme4/lme4/issues/55 – Andrie Juil-2 '13 à 15:42

Ceci doit être corrigé maintenant pour lmer (mais pas pour glmer, qui est un peu plus compliqué). – Ben Bolker 14 Juil.

C'était quand la version est < 0.99999911-6; lme4 sur CRAN a eu des versions > 1.0-4 depuis le 21-Sep-2013.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X