Ich versuche, ein einfaches Potenzgesetzmodell an einen Datensatz anzupassen, der wie folgt lautet:
mydf
::
rev weeks
17906.4 1
5303.72 2
2700.58 3
1696.77 4
947.53 5
362.03 6
Das Ziel ist es, die Stromleitung durchzuleiten und damit rev
Werte für zukünftige Wochen vorherzusagen . Eine Reihe von Recherchen hat mich zu der nls
Funktion geführt, die ich wie folgt implementiert habe.
newMod <- nls(rev ~ a*weeks^b, data=modeldf, start = list(a=1,b=1))
predict(newMod, newdata = data.frame(weeks=c(1,2,3,4,5,6,7,8,9,10)))
Während dies für ein lm
Modell funktioniert , erhalte ich einen singular gradient
Fehler, der meines Wissens mit meinen Startwerten a
und zu tun hat b
. Ich habe verschiedene Werte ausprobiert und bin sogar so weit gegangen, dies in Excel zu zeichnen, einen einzelnen zu übergeben, eine Gleichung zu erhalten und dann die Werte aus der Gleichung zu verwenden, aber ich erhalte immer noch den Fehler. Ich sah mir eine Reihe von Antworten wie diese an und versuchte die zweite Antwort (konnte die erste nicht verstehen), aber ohne Ergebnis.
Ich könnte hier wirklich Hilfe gebrauchen, um die richtigen Startwerte zu finden. Oder alternativ, welche andere Funktion kann ich anstelle von nls verwenden.
Für den Fall, dass Sie mydf
mit Leichtigkeit neu erstellen möchten :
mydf <- data.frame(rev=c(17906.4, 5303.72, 2700.58 ,1696.77 ,947.53 ,362.03), weeks=c(1,2,3,4,5,6))
quelle
Antworten:
Dies ist ein häufiges Problem bei nichtlinearen Modellen der kleinsten Quadrate. Wenn Ihre Startwerte sehr weit vom Optimum entfernt sind, konvergiert der Algorithmus möglicherweise nicht, obwohl er sich in der Nähe des Optimums gut verhält.
quelle
exp
log
Versuchen
Ich wurde gebeten, diese Antwort etwas zu erweitern. Dieses Problem ist so einfach, dass ich überrascht bin, dass nls daran scheitert. Das eigentliche Problem ist jedoch der gesamte R-Ansatz und die Philosophie der nichtlinearen Modellanpassung. In der realen Welt würde man x so skalieren, dass es zwischen -1 und 1 liegt und y und y zwischen 0 und 1 liegen (y = ax ^ b). Das würde wahrscheinlich ausreichen, um nls zur Konvergenz zu bringen. Natürlich können Sie, wie Glen betont, das entsprechende logarithmische lineare Modell anpassen. Dies beruht auf der Tatsache, dass es eine einfache Transformation gibt, die das Modell linearisiert. Das ist oft nicht der Fall. Das Problem bei R-Routinen wie nls ist, dass sie keine Unterstützung für die Neuparametrisierung des Modells bieten. In diesem Fall ist die Neuparametrisierung einfach. Skalieren Sie einfach x / y neu. Wenn der Benutzer jedoch zum Modell passt, hat er andere Parameter a und b als die ursprünglichen. Während es einfach ist, die ursprünglichen daraus zu berechnen, besteht die andere Schwierigkeit darin, dass es im Allgemeinen nicht so einfach ist, die geschätzten Standardabweichungen für diese Parameterschätzungen zu erhalten. Dies erfolgt nach der Delta-Methode, bei der der Hessische Wert der logarithmischen Wahrscheinlichkeit und einige Derivate berücksichtigt werden. Nichtlineare Parameterschätzungssoftware sollte diese Berechnungen automatisch bereitstellen, damit die Neuparametrisierung des Modells leicht unterstützt wird. Eine andere Sache, die Software unterstützen sollte, ist der Begriff der Phasen. Sie können sich vorstellen, das Modell zuerst mit Glen's Version als Phase 1 auszurüsten. Das "echte" Modell wird in Stufe 2 angepasst. Die andere Schwierigkeit besteht darin, dass es im Allgemeinen nicht so einfach ist, die geschätzten Standardabweichungen für diese Parameterschätzungen zu erhalten. Dies erfolgt nach der Delta-Methode, bei der der Hessische Wert der logarithmischen Wahrscheinlichkeit und einige Derivate berücksichtigt werden. Nichtlineare Parameterschätzungssoftware sollte diese Berechnungen automatisch bereitstellen, damit die Neuparametrisierung des Modells leicht unterstützt wird. Eine andere Sache, die Software unterstützen sollte, ist der Begriff der Phasen. Sie können sich vorstellen, das Modell zuerst mit Glen's Version als Phase 1 auszurüsten. Das "echte" Modell wird in Stufe 2 angepasst. Die andere Schwierigkeit besteht darin, dass es im Allgemeinen nicht so einfach ist, die geschätzten Standardabweichungen für diese Parameterschätzungen zu erhalten. Dies erfolgt nach der Delta-Methode, bei der der Hessische Wert der logarithmischen Wahrscheinlichkeit und einige Derivate berücksichtigt werden. Nichtlineare Parameterschätzungssoftware sollte diese Berechnungen automatisch bereitstellen, damit die Neuparametrisierung des Modells leicht unterstützt wird. Eine andere Sache, die Software unterstützen sollte, ist der Begriff der Phasen. Sie können sich vorstellen, das Modell zuerst mit Glen's Version als Phase 1 auszurüsten. Das "echte" Modell wird in Stufe 2 angepasst. Nichtlineare Parameterschätzungssoftware sollte diese Berechnungen automatisch bereitstellen, damit die Neuparametrisierung des Modells leicht unterstützt wird. Eine andere Sache, die Software unterstützen sollte, ist der Begriff der Phasen. Sie können sich vorstellen, das Modell zuerst mit Glen's Version als Phase 1 auszurüsten. Das "echte" Modell wird in Stufe 2 angepasst. Nichtlineare Parameterschätzungssoftware sollte diese Berechnungen automatisch bereitstellen, damit die Neuparametrisierung des Modells leicht unterstützt wird. Eine andere Sache, die Software unterstützen sollte, ist der Begriff der Phasen. Sie können sich vorstellen, das Modell zuerst mit Glen's Version als Phase 1 auszurüsten. Das "echte" Modell wird in Stufe 2 angepasst.
Ich passe Ihr Modell mit AD Model Builder an, der Phasen auf natürliche Weise unterstützt. In der ersten Phase wurde nur a geschätzt. Dies bringt Ihr Modell in den Ballpark. In der zweiten Phase werden a und b geschätzt, um die Lösung zu erhalten. AD Model Builder berechnet automatisch die Standardabweichungen für jede Funktion der Modellparameter über die Delta-Methode, um eine stabile Neuparametrisierung des Modells zu fördern.
quelle
Der Levenberg-Marquardt-Algorithmus kann helfen:
quelle
Nach meiner Erfahrung ist die Verwendung eines evolutionären Algorithmus eine gute Möglichkeit, Startwerte für Parameter von NLR-Modellen zu finden. Wählen Sie aus einer anfänglichen Population (100) zufälliger Schätzungen (Eltern) in einem Suchraum die besten 20 (Nachkommen) aus und verwenden Sie diese, um eine Suche in einer nachfolgenden Population zu definieren. Wiederholen bis zur Konvergenz. Keine Notwendigkeit für Gradienten oder Hessen, nur SSE-Bewertungen. Wenn Sie nicht zu gierig sind, funktioniert dies sehr oft. Die Probleme, die Menschen häufig haben, bestehen darin, dass sie eine lokale Suche (Newton-Raphson) verwenden, um die Arbeit einer globalen Suche auszuführen. Wie immer geht es darum, das richtige Werkzeug für den jeweiligen Auftrag zu verwenden. Es ist sinnvoller, eine globale EA-Suche zu verwenden, um Startwerte für die lokale Newton-Suche zu finden, und diese dann auf das Minimum zu reduzieren. Aber wie bei allen Dingen steckt der Teufel im Detail.
quelle