Bedeutung einer Konvergenzwarnung in glmer

16

Ich verwende die glmerFunktion aus dem lme4Paket in R und verwende den bobyqaOptimierer (dh die Standardeinstellung in meinem Fall). Ich bekomme eine Warnung und bin gespannt, was das bedeutet.

Warning message:
In optwrap(optimizer, devfun, start, rho$lower, control = control,  :
  convergence code 3 from bobyqa: bobyqa -- a trust region step failed to reduce q

Ich suchte nach "Ein Vertrauensbereichsschritt konnte q nicht reduzieren." In der Minqa-Packung wurden einige Informationen gefunden, die lauten : " Wenden Sie sich an Powell, um eine Erklärung zu erhalten." Ich habe es getan (Sie können es auch, wenn Sie möchten! Sehen Sie die Verweise und Links zu ihnen unten), aber ich verstehe es nicht. Tatsächlich konnte ich nichts über die Reduzierung von q finden.

MJD Powell (2007) "Entwicklungen von NEWUOA für die uneingeschränkte Minimierung ohne Derivate", Universität Cambridge, Institut für Angewandte Mathematik und Theoretische Physik, Arbeitsgruppe Numerische Analyse, Bericht NA2007 / 05, http://www.damtp.cam.ac.uk/ user / na / NA_papers / NA2007_05.pdf .

MJD Powell (2009), "Der BOBYQA-Algorithmus für gebundene beschränkte Optimierung ohne Derivate", Bericht Nr. DAMTP 2009 / NA06, Zentrum für Mathematische Wissenschaften, Universität Cambridge, UK. http://www.damtp.cam.ac.uk/user/na/NA_papers/NA2009_06.pdf .

PS Ich weiß, dass ich den Optimierer ändern kann, und ich werde sehen, ob ich ohne Warnungen oder Fehler ausgegeben werden kann. Ich werde auch die Steigung und Hessisch prüfen, wenn ich kann, wie aus einem Kommentar / einer Antwort von Ben Bolker hervorgeht . Ich verwende glmerinnerhalb von dredgefrom MuMInund bin mir nicht sicher, ob Bens Antwort ohne weiteres Basteln funktionieren wird, aber ich werde daran arbeiten, sobald mein Computer fertig ist, was er macht, jedenfalls schweife ich ab.

Aktualisieren

Gemäß dem Kommentar von Dr. Bolker habe ich begonnen, den FORTRAN-Code zu durchsuchen ( hier ist der Code für alle, die ihn suchen, aber nicht herunterladen möchten ). "430" wird im Abschnitt "bobyqb.f" des Codes angezeigt. Suchen Sie einfach nach "430" oder "Q reduzieren", um den entsprechenden Code zu finden.

Dies ist meine erste Begegnung mit FORTRAN-Code, aber ich denke, der Code besagt, dass, wenn die folgenden Bedingungen erfüllt sind, die Warnung erzeugt wird: NTRITS> 0, VQUAD> = 0, IPRINT> 0. "Die Ganzzahl NTRITS wird auf die Zahl" Vertrauensbereich "gesetzt. Iterationen, die seit der letzten "alternativen" Iteration aufgetreten sind. " VQUADerscheint mehrmals und ich bin mir noch nicht sicher, welche Bedeutung es hat, da sein Wert von einer Vielzahl anderer Variablen abhängig zu sein scheint, deren Werte manchmal von anderen Variablen abhängen. Von bobyqa.f: "Der Wert von IPRINT sollte sein setze auf 0, 1, 2 oder 3, was den Umfang des Druckens steuert. Insbesondere gibt es keine Ausgabe, wenn IPRINT = 0 ist, und gibt es nur bei der Rückgabe eine Ausgabe, wenn IPRINT = 1 ist. "

Es scheint also die Aufgabe zu sein, herauszufinden, wie wichtig VQUADes ist,> = 0 zu sein und vielleicht zu verstehen, wie / wann IPRINT> 0 wurde. Ich muss noch einmal zur Zeitung gehen, um einen Blick darauf zu werfen, aber auf die Mathematik oder auf Zumindest sein symbolischer Ausdruck ist für mich ein kleines Hindernis. Wenn jemand den Algorithmus nicht kennt oder wissen möchte, muss ich das Verständnis der Warnung schrittweise verbessern, indem ich zwischen den Dokumenten, dem Code und dem Internet hin und her gehe, bis ich verstehe, was es ist meint.

Jota
quelle
3
Ich denke, diese Frage ist möglicherweise ein Thema für den Lebenslauf b / c. Es geht anscheinend eher darum, die Ideen zu verstehen, als w / R per se zu helfen.
gung - Setzen Sie Monica wieder ein
Ich bin mir nicht sicher, ob ich in diesem Fall eine Menge zu empfehlen habe, als die Papiere und den FORTRAN - Code (der im Anhang enthalten ist) Stück für Stück durchzugehen src Verzeichnis cran.r-project.org/src/contrib/minqa_1 Stück für Stück durchzuarbeiten. 2.3.tar.gz ) und genau zu sehen, was passiert , wenn dieser Fehler (Fehlercode 430 im Code) ausgelöst wird ...
Ben Bolker
1
Schnelles Überfliegen des Papiers Ich denke, die Warnung weist darauf hin, dass der Optimierer keine Richtung finden kann, in der die quadratische Approximation Q für die zu minimierende Funktion F abnimmt. Das heißt, der Optimierer befindet sich an einem Punkt, der höchstwahrscheinlich nicht optimal ist, aber er weiß nicht, wie er das Ziel verbessern soll. Daher steckt es fest.
Sven
1
Welches der beiden Papiere haben Sie überflogen und ungefähr wo haben Sie diese Informationen gefunden? (Ich habe auch überflogen, konnte aber die Korrespondenz zwischen Papier und Code nicht so einfach herstellen ...)
Ben Bolker
Ich habe die BOBYQA-Zeitung gelesen. Ich habe die erste Hälfte in ungefähr 5 Minuten durchgesehen, um eine umfassende Vorstellung davon zu bekommen, was sie machen und was Q ist. Kann nicht wirklich auf eine bestimmte Seite verweisen.
Sven

Antworten:

13

f(x)xkk

  • Δk
  • f(x)x=xkQ.(x)
  • skQ.k(xk+sk)||sk||Δk
  • skxk+1=xk+sk
  • Andernfalls verfeinern Sie Ihr Modell und versuchen es erneut

Eine der Möglichkeiten, wie Sie feststellen, ob sk

Um den Wert von VQUADzu verstehen, müssen wir zuerst einige andere Variablen verstehen. Glücklicherweise gibt es gute Kommentare direkt unter der Deklaration von SUBROUTINE BOBYQB. Die wichtigsten Variablen sind:

  • GOPT, die Steigung des Modells
  • HQ, der Hessische des Modells
  • Dsk oben)

Beginnen Sie ein paar Zeilen über 410, werden Sie sehen DO 410 J=1,N. Hiermit wird eine for-Schleife (und eine verschachtelte for-Schleife) gestartet, die die vom Modell vorhergesagte Änderung mithilfe des Testschritts auswertet D. Es akkumuliert die vorhergesagte Änderung inVQUAD . Der erste Teil der for-Schleife wertet die Terme erster Ordnung aus, und die verschachtelte for-Schleife wertet die Terme zweiter Ordnung aus. Es wäre wahrscheinlich einfacher zu lesen, wenn die Schleifen wie folgt eingerückt wären:

    DO 410 J=1,N
        VQUAD=VQUAD+D(J)*GOPT(J)
        DO 410 I=1,J
            IH=IH+1
            TEMP=D(I)*D(J)
            IF (I .EQ. J) TEMP=HALF*TEMP
410         VQUAD=VQUAD+HQ(IH)*TEMP

Danach gibt es eine weitere for-Schleife, mit der andere Parameter in das Modell aufgenommen werden können. Ich muss zugeben, dass ich das nicht ganz verstehe. Ich vermute, dass es speziell darauf ankommt, wie sie das Modell bauen.

Am Ende steht VQUADdie vom Modell vorhergesagte Änderung der Zielfunktion. Also, wenn VQUADes nicht negativ ist, ist das schlecht. Jetzt kann dieser spezielle Löser eine alternative Schrittberechnung (wahrscheinlich eine Liniensuche) verwenden, bei der es NTRITSdarum geht, zu spielen. Die Logik bei 430 sagt also: "Wenn die letzte Iteration die alternative Schrittberechnung verwendet hat UND das Modell keine Abnahme vorhersagt UND IPRINT> 0 ist, wird die Warnmeldung gedruckt." Beachten Sie, dass der Solver unabhängig vom Wert von beendet wird IPRINT.

Apropos IPRINT, dieser Wert wird BOBYQAvon der aufrufenden Funktion übergeben. In diesem Fall ist Ihre R-Routine die aufrufende Funktion. Es gibt einen verboseParameter zu glmer- ich würde zu Dollars Groschen sein, denen der gleiche Wert übergeben wird BOBYQA. Setzen Sie den Wert verboseauf 0 und Sie werden die Warnung wahrscheinlich nicht sehen. Aber es wird natürlich nichts daran ändern, was unter der Haube vor sich geht.

Bill Woessner
quelle
1
das ist sehr hilfreich; Ich glaube nicht, dass ich es besser machen werde, indem ich ein Kopfgeld vergebe ...
Ben Bolker
@BenBolker. Also sollte ich besorgt sein , was hier vor sich geht, oder ist das wirklich nur ein Ärgernis im Code? (Mit anderen Worten, bedeutet diese Warnung, dass meine Ergebnisse ungültig sind?)
theforestecologist
1
Der allgemeine Rat in diesem Fall lautet wie folgt ?lme4::convergence: Nachdem Sie das Optimierungsverfahren nicht vollständig und detailliert evaluiert haben, sollten Sie die Ergebnisse verschiedener Optimierer vergleichen.
Ben Bolker