Lmer-Modell konvergiert nicht


12

Meine Daten werden hier beschrieben. Was kann dazu führen, dass beim Anpassen einer ANOVA mit wiederholten Messungen ein "Error () - Modell ist ein singulärer Fehler" auftritt?

Ich versuche, den Effekt einer Interaktion zu sehen, indem lmerich folgenden Basisfall benutze :

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)

Das Ausführen von anovagibt mir signifikante Ergebnisse, aber wenn ich versuche, die zufällige Steigung ( (1+Scenario|Player)) zu berücksichtigen, schlägt das Modell mit folgendem Fehler fehl:

  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

Alternativ, wenn es nach vielen Iterationen nicht konvergiert (ich habe es auf eingestellt 100 000) und ich danach die gleichen Ergebnisse erhalte 50kund 100kes bedeutet, dass es dem tatsächlichen Wert sehr nahe kommt, nur dass es ihn nicht erreicht. Kann ich meine Ergebnisse also so melden?

Beachten Sie, dass ich nur die folgenden Warnungen erhalte, wenn ich die Iterationen so hoch einstelle:

 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

Antworten:


8

In dieser Konversation finden Sie eine alternative Methode zur Beurteilung der Konvergenz. Insbesondere dieser Kommentar von Ben Bolker:

Vielen Dank. Ein noch einfacherer Test wäre, ein passendes Beispiel zu nehmen, das Ihnen Konvergenzwarnungen gab, und die Ergebnisse von zu betrachten
relgrad <- with(fitted_model@optinfo$derivs,solve(Hessian,gradient))
max(abs(relgrad))
und zu prüfen, ob es einigermaßen klein ist (z. B. <0,001?).

Alternativ können Sie versuchen Bolker Rat hier , die einen anderen Optimierer zu versuchen.


1
Was soll man tun, wenn max (abs (relgrad)) einen Wert von 2.9239489e-05 ergibt?
Jens

1
@Jens dann wäre das wirklich sehr, sehr klein (e-05 bedeutet "schreibe 5 Nullen und dann die Zahlen, die du links siehst", mit einem Punkt nach der ersten Null). Mit diesem Wert würde man sich also sehr freuen!
Arthur Spoon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.