Ich möge y=a^(b^x)
verwenden, um die unten angegebenen Daten zu passen,eine Kurve Ändern singuläre Gradientenmatrix bei Anfangsparameter zu verhindern schätzt
y <- c(1.0385, 1.0195, 1.0176, 1.0100, 1.0090, 1.0079, 1.0068, 1.0099, 1.0038)
x <- c(3,4,5,6,7,8,9,10,11)
data <- data.frame(x,y)
Wenn ich das nicht-lineare Kleinste-Quadrate-Verfahren verwenden,
f <- function(x,a,b) {a^(b^x)}
(m <- nls(y ~ f(x,a,b), data = data, start = c(a=1, b=0.5)))
es erzeugt einen Fehler: singuläre Gradientenmatrix bei ersten Parameterschätzungen. Das Ergebnis ist grob a = 1,1466, b = 0,6415, also sollte es kein Problem mit Anfangsparameterschätzungen geben, da ich sie als a = 1, b = 0,5 definiert habe.
Ich habe in anderen Themen gelesen, dass es bequem ist, die Kurve zu ändern. Ich dachte über etwas wie log y=log a *(b^x)
nach, aber ich weiß nicht, wie man mit der Funktionsspezifikation umgeht. Irgendeine Idee?
Wenn ich: '(m <- nls (y ~ f (x, a, b), Daten = Daten, Start = c (a = 0.9, b = 0.6))) 'Ich erhalte keinen Fehler. Ich bekomme die gleiche Antwort, wenn ich folgendes benutze: '(m <- nls (y ~ f (x, a, b), Daten = Daten, Start = c (a = 1,2, b = 0,4)))' Ich weiß es nicht wenn das hilft. –
Das ist interessant. Irgendein automatischer Weg, um herauszufinden, was Startwerte für a und b sein sollen? ___ Ich denke, ich kann das gute ol '' a^b^3 = 1.0385 'verwenden, dh' a^b = 1.0385^(1/3) = 1.01267', was gilt für "a = 1.01267" und "b = 1". Das funktioniert mit '(m <- nls (y ~ f (x, a, b), Daten = Daten, Start = c (a = 1.01267, b = 1.0))). Trotzdem würde ich es lieber automatisch haben ... – Vochmelka