Warnung "Modell konnte nicht konvergieren" in lmer ()


21

Mit dem folgenden Datensatz wollte ich sehen, ob sich die Reaktion (Wirkung) in Bezug auf Standorte, Jahreszeit, Dauer und deren Wechselwirkungen ändert. In einigen Online-Foren zu Statistiken wurde empfohlen, mit Modellen mit linearen gemischten Effekten fortzufahren. Das Problem besteht jedoch darin, dass ich in den folgenden Jahreszeiten kaum die Chance habe, die Stichprobe an genau derselben Stelle zu sammeln (z. B. Repl-1 von S1 nach dem Monsun ist möglicherweise nicht das gleiche wie das von Monsun). Im Gegensatz zu den klinischen Studien (mit subjektinternem Design), bei denen Sie dasselbe Subjekt über die Jahreszeiten wiederholt messen. Unter Berücksichtigung der Standorte und der Jahreszeit als Zufallsfaktor habe ich jedoch die folgenden Befehle ausgeführt und eine Warnmeldung erhalten:

Warning messages:
1: In checkConv(attr(opt, "derivs"), optpar,ctrl=controlpar,ctrl=controlcheckConv, 
: unable to evaluate scaled gradient
2: In checkConv(attr(opt, "derivs"), optpar,ctrl=controlpar,ctrl=controlcheckConv, 
: Model failed to converge: degenerate Hessian with 1 negative eigenvalues

Kann mir jemand helfen, das Problem zu lösen? Die Codes sind unten angegeben:

library(lme4)
read.table(textConnection("duration season  sites   effect
                          4d    mon s1  7305.91
                          4d    mon s2  856.297
                          4d    mon s3  649.93
                          4d    mon s1  10121.62
                          4d    mon s2  5137.85
                          4d    mon s3  3059.89
                          4d    mon s1  5384.3
                          4d    mon s2  5014.66
                          4d    mon s3  3378.15
                          4d    post    s1  6475.53
                          4d    post    s2  2923.15
                          4d    post    s3  554.05
                          4d    post    s1  7590.8
                          4d    post    s2  3888.01
                          4d    post    s3  600.07
                          4d    post    s1  6717.63
                          4d    post    s2  1542.93
                          4d    post    s3  1001.4
                          4d    pre s1  9290.84
                          4d    pre s2  2199.05
                          4d    pre s3  1149.99
                          4d    pre s1  5864.29
                          4d    pre s2  4847.92
                          4d    pre s3  4172.71
                          4d    pre s1  8419.88
                          4d    pre s2  685.18
                          4d    pre s3  4133.15
                          7d    mon s1  11129.86
                          7d    mon s2  1492.36
                          7d    mon s3  1375
                          7d    mon s1  10927.16
                          7d    mon s2  8131.14
                          7d    mon s3  9610.08
                          7d    mon s1  13732.55
                          7d    mon s2  13314.01
                          7d    mon s3  4075.65
                          7d    post    s1  11770.79
                          7d    post    s2  4254.88
                          7d    post    s3  753.2
                          7d    post    s1  11324.95
                          7d    post    s2  5133.76
                          7d    post    s3  2156.2
                          7d    post    s1  12103.76
                          7d    post    s2  3143.72
                          7d    post    s3  2603.23
                          7d    pre s1  13928.88
                          7d    pre s2  3208.28
                          7d    pre s3  8015.04
                          7d    pre s1  11851.47
                          7d    pre s2  6815.31
                          7d    pre s3  8478.77
                          7d    pre s1  13600.48
                          7d    pre s2  1219.46
                          7d    pre s3  6987.5
                          "),header=T)->dat1


m1 = lmer(effect ~ duration + (1+duration|sites) +(1+duration|season),
          data=dat1, REML=FALSE)

@ Ian_Fin. Vielen Dank für die Bearbeitung. Eigentlich weiß ich nicht, wie man R-Codes wie oben
einfügt

Antworten:


47

Das Problem zu "lösen", bei dem Sie keine Warnungen bezüglich fehlgeschlagener Konvergenz erhalten, ist recht einfach: Sie verwenden nicht den Standard- BOBYQA- Optimierer, sondern verwenden die in früheren Vorgängerversionen standardmäßig verwendete Nelder-Mead- Optimierungsroutine 1.0.x. Oder Sie installieren das Paket optimxso, dass Sie direkt eine L-BFGS-B- Routine oder nlminb(wie in lme4Versionen vor ver. 1). Beispielsweise:

m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(optimizer ="Nelder_Mead")
library(optimx)
m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(
                           optimizer ='optimx', optCtrl=list(method='L-BFGS-B')))
m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(
                           optimizer ='optimx', optCtrl=list(method='nlminb')))

Alle funktionieren gut (keine Warnungen). Die interessanten Fragen sind:

  1. Warum haben Sie diese Warnungen zuerst und erhalten?
  2. warum, als Sie benutzten REML = TRUE, erhielten Sie keine Warnungen.

Kurz gesagt, 1. Sie haben diese Warnungen erhalten, weil Sie durationsowohl einen festen Effekt als auch eine zufällige Steigung für den Faktor sitesals auch definiert haben season. Dem Modell gingen die Freiheitsgrade zur Abschätzung der Korrelationen zwischen den Steigungen und den von Ihnen definierten Abschnitten effektiv aus. Wenn Sie ein etwas einfacheres Modell verwendet haben, wie:

m1 = lmer(effect~duration+ (1+duration|sites) + (0+duration|season) + (1|season),
          data=dat1, REML = FALSE)

Sie würden keine Konvergenzprobleme haben. Dieses Modell würde unkorrelierte zufällige Abschnitte und zufällige Steigungen für jeden effektiv schätzen season.

Außerdem haben REML = FALSESie bei der Definition 2. die geschätzte maximale Wahrscheinlichkeit anstelle der eingeschränkten maximalen Wahrscheinlichkeit 1 verwendet. Bei den REML-Schätzungen wird versucht, den Einfluss der festen Effekte "herauszufiltern", bevor die optimale Varianzstruktur für zufällige Effekte ermittelt wird (siehe Thread " Was ist" eingeschränkte maximale Wahrscheinlichkeit "und wann sollte sie verwendet werden? " Für weitere Einzelheiten) Informationen zu diesem Thema). Diese Prozedur erfolgt rechnerisch im Wesentlichen durch Multiplikation beider Teile der ursprünglichen LME-Modellgleichung mit einer Matrix so dass , dh Sie ändern sowohl das ursprüngliche zu als auch dasXy=Xβ+Zγ+ϵKKX=0yKyZ bis . Ich bin der festen Überzeugung, dass dies die Bedingungsnummer der Entwurfsmatrix und Ihnen als solche aus der numerischen Schwierigkeit heraushilft, die Sie an erster Stelle gefunden haben.KZZ

Eine letzte Bemerkung ist, dass ich nicht sicher bin, ob es Sinn macht, zunächst seasoneinen zufälligen Effekt zu verwenden. Schließlich gibt es nur so viele Jahreszeiten, dass Sie sie genauso gut als feste Effekte behandeln können.


Übrigens, willkommen in der Community!
usεr11852 sagt Reinstate Monic

1
@ Syamkumar.R: Cool, ich bin froh, dass ich helfen konnte. Wenn Sie glauben, dass dies Ihre Frage beantwortet, können Sie in Betracht ziehen, die Antwort zu akzeptieren.
usεr11852 sagt Reinstate Monic

vielen Dank!! Die 3. Variante - REML = FALSE, glmerControl(optimizer ='optimx', optCtrl=list(method='nlminb'))tatsächlich gelöstes Konvergenzproblem in glmer!
Neugierig

0

Die Frage ist eher statistisch als technisch. Eigentlich habe ich ein Zufallseffektmodell anstelle eines festen Effektmodells verwendet. Ich denke, keiner der Faktoren sollte als Zufallsfaktor behandelt werden, da wir mindestens 5 oder 6 Stufen oder Wiederholungen benötigen, um einen Faktor als Zufallseffekt zu behandeln (siehe hier Was ist die empfohlene Mindestanzahl von Gruppen für einen Zufallseffektfaktor? ).

Der obige Datensatz enthält nur dreifache Proben / Ort / Jahreszeit, die für ein Zufallseffektmodell nicht ausreichen. In dem Datensatz gehören die Dauer von 4 Tagen und 7 Tagen zu zwei getrennten parallelen Experimenten, die unter der gleichen Zeit durchgeführt wurden. Das Ausspucken des Datensatzes nach Dauer (4 Tage und 7 Tage) und das Durchführen einer 2-Wege-Anova für jede Dauer mit Jahreszeit und Standorten als die Faktoren wären ausreichend, um den Effekt (Antwortvariable) hier zu modellieren. Das Modell sollte folgendes sein:

lm(day_4_effect~sites*season, data=dat1)

lm(day_7_effect~sites*season, data=dat1)

Vielen Dank an Bodo Winter ( http://www.bodowinter.com/tutorial/bw_LME_tutorial2.pdf ) und @ usεr11852, die mir geholfen haben, das Problem zu lösen.

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.