Le modèle Lmer ne parvient pas à converger

12

Mes données sont décrites ici. Qu'est-ce qui peut provoquer une "erreur () est une erreur singulière" dans aov lors de l'ajustement d'un ANOVA à mesures répétées?

J'essaie de voir l'effet d'une interaction en utilisant lmerdonc mon cas de base est:

my_null.model <- lmer(value ~ Condition+Scenario+ 
                             (1|Player)+(1|Trial), data = my, REML=FALSE)

my.model <- lmer(value ~ Condition*Scenario+ 
                             (1|Player)+(1|Trial), data = my, REML=FALSE)

L'exécution de anovame donne des résultats significatifs, mais lorsque j'essaie de tenir compte de la pente aléatoire ( (1+Scenario|Player)), le modèle échoue avec cette erreur:

  Warning messages:
 1: In commonArgs(par, fn, control, environment()) :
   maxfun < 10 * length(par)^2 is not recommended.
 2: In optwrap(optimizer, devfun, getStart(start, rho$lower, rho$pp),  :
  convergence code 1 from bobyqa: bobyqa -- maximum number of function evaluations exceeded
 3: In commonArgs(par, fn, control, environment()) :
  maxfun < 10 * length(par)^2 is not recommended.
 4: In optwrap(optimizer, devfun, opt$par, lower = rho$lower, control = control,  :
   convergence code 1 from bobyqa: bobyqa -- maximum number of function evaluations exceeded
 5: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
   Model failed to converge with max|grad| = 36.9306 (tol = 0.002)
 6: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
   Model failed to converge: degenerate  Hessian with 1 negative eigenvalues

Alternativement, s'il ne parvient pas à converger après de nombreuses itérations (je l'ai défini sur 100 000) et que j'obtiens les mêmes résultats après 50k, 100kcela signifie qu'il est très proche de la valeur réelle, juste qu'il ne l'atteint pas. Puis-je signaler mes résultats comme celui-ci?

Notez que lorsque je règle les itérations si haut, je ne reçois que ces avertissements:

 Warning messages:
1: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
 Model failed to converge with max|grad| = 43.4951 (tol = 0.002)
2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
 Model failed to converge: degenerate  Hessian with 1 negative eigenvalues
Pio
la source

Réponses:

8

Voir cette conversation pour une méthode alternative d'évaluation de la convergence. Plus précisément, ce commentaire de Ben Bolker:

Merci. Un test encore plus simple serait de prendre un exemple ajusté qui vous a donné des avertissements de convergence et de jeter un coup d'œil aux résultats
relgrad <- with(fitted_model@optinfo$derivs,solve(Hessian,gradient))
max(abs(relgrad))
et de voir s'il est raisonnablement petit (par exemple <0,001?)

Vous pouvez également essayer les conseils de Bolker ici , qui consiste à essayer un optimiseur différent.

filups21
la source
1
que faire si max (abs (relgrad)) vous donne une valeur de 2.9239489e-05?
Jens
1
@Jens alors ce serait vraiment, vraiment petit (e-05 signifie "écrire 5 zéros puis les chiffres que vous voyez à gauche", avec un point après le premier zéro). On serait donc assez content de cette valeur!
Arthur Spoon