Il modello Lmer non riesce a convergere


12

I miei dati sono descritti qui Cosa può causare un "modello Error () è un errore singolare" in aov quando si inseriscono misure ANOVA ripetute?

Sto cercando di vedere l'effetto di un'interazione usando lmerquindi il mio caso base è:

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'esecuzione di anovami dà risultati significativi, ma quando provo a tenere conto della pendenza casuale ( (1+Scenario|Player)) il modello non riesce con questo errore:

  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

In alternativa, se non riesce a convergere dopo molte iterazioni (l'ho impostato su 100 000) e dopo ottengo gli stessi risultati 50ke 100ksignifica che è molto vicino al valore reale, semplicemente non lo raggiunge. Quindi posso segnalare i miei risultati in questo modo?

Nota che quando imposto le iterazioni su un valore così alto ricevo solo questi avvisi:

 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

Risposte:


8

Vedi questa conversazione per un metodo alternativo di valutazione della convergenza. Nello specifico, questo commento di Ben Bolker:

Grazie. Un test ancora più semplice sarebbe quello di prendere un esempio adattato che ti dava avvisi di convergenza e dare un'occhiata ai risultati di
relgrad <- with(fitted_model@optinfo$derivs,solve(Hessian,gradient))
max(abs(relgrad))
e vedere se è ragionevolmente piccolo (es. <0,001?)

In alternativa, puoi provare i consigli di Bolker qui , ovvero provare un altro ottimizzatore.


1
cosa si dovrebbe fare se max (abs (relgrad)) ti dà un valore di 2.9239489e-05?
Jens,

1
@Jens allora sarebbe davvero molto piccolo (e-05 significa "scrivi 5 zeri e poi i numeri che vedi a sinistra", con un punto dopo il primo zero). Quindi uno sarebbe abbastanza felice con quel valore!
Arthur Spoon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.