Ich habe folgende Daten und möchte ein negatives exponentielles Wachstumsmodell hinzufügen:
Days <- c( 1,5,12,16,22,27,36,43)
Emissions <- c( 936.76, 1458.68, 1787.23, 1840.04, 1928.97, 1963.63, 1965.37, 1985.71)
plot(Days, Emissions)
fit <- nls(Emissions ~ a* (1-exp(-b*Days)), start = list(a = 2000, b = 0.55))
curve((y = 1882 * (1 - exp(-0.5108*x))), from = 0, to =45, add = T, col = "green", lwd = 4)
Der Code funktioniert und eine Anpassungslinie wird gezeichnet. Die Passform ist jedoch optisch nicht optimal und die verbleibende Quadratsumme scheint ziemlich groß zu sein (147073).
Wie können wir unsere Passform verbessern? Ermöglichen die Daten überhaupt eine bessere Anpassung?
Wir konnten im Internet keine Lösung für diese Herausforderung finden. Jede direkte Hilfe oder Verknüpfung zu anderen Websites / Posts wird sehr geschätzt.
r
nonlinear-regression
fitting
nls
Strohmi
quelle
quelle
fit <- nls(Emissions ~ a* (1- u*exp(-b*Days)), start = list(a = 2000, b = 0.1, u=.5)); beta <- coefficients(fit); curve((y = beta["a"] * (1 - beta["u"] * exp(-beta["b"]*x))), add = T)
.Antworten:
Ein (negatives) Exponentialgesetz hat die Form . Wenn Sie Änderungen der Einheiten in den x- und y- Werten zulassen , sagen wir jedoch y = α y ' + β und x = γ x ' + δ , dann wird das Gesetz ausgedrückt alsy=−exp(−x) x y y=αy′+β x=γx′+δ
das ist algebraisch äquivalent zu
unter Verwendung von drei Parametern , u = 1 / ( β exp ( δ ) ) und b = γ . Wir können a als Skalierungsparameter für y , b als Skalierungsparameter für x erkennena=−β/α u=1/(βexp(δ)) b=γ a y b x und wie aus einem Ableiten Position für den Parameter x .u x
Als Faustregel können diese Parameter auf einen Blick aus der Grafik identifiziert werden :
Der Parameter ist der Wert der horizontalen Asymptote, etwas weniger als 2000 .a 2000
Der Parameter ist der relative Betrag, um den die Kurve vom Ursprung zu ihrer horizontalen Asymptote ansteigt. Hier beträgt der Anstieg also etwas weniger als 2000 - 937 ; relativ sind das ungefähr 0,55 der Asymptote.u 2000−937 0.55
Da , sollte die Kurve , wenn x dem dreifachen Wert von 1 / b entspricht, auf etwa 1 - 0,05 oder 95 % ihrer Gesamtheit angestiegen sein. 95 % des Anstiegs von 937 auf fast 2000 liegen um 1950 ; Das Scannen des Diagramms ergab, dass dies 20 bis 25 Tage dauerte . Nennen wir es 24 der Einfachheit halber, von wo aus b ≈ 3 / 24exp(−3)≈0.05 x 1/b 1−0.05 95% 95% 937 2000 1950 20 25 24 . (Diese 95- prozentige Methode zur Ermittlung einer Exponentialskala ist in einigen Bereichen, in denen Exponentialkurven häufig verwendet werden, Standard.)b≈3/24=0.125 95%
Mal sehen, wie das aussieht:
Nicht schlecht für den Anfang! (Trotz des Tippens
0.56
anstelle von0.55
, was sowieso eine grobe Annäherung war.) Wir können es polieren mitnls
:Die Ausgabe von
nls
enthält umfangreiche Informationen zur Parameterunsicherheit. Zum Beispiel kann eine einfachesummary
liefert Standardfehler der Schätzungen:Wir können die gesamte Kovarianzmatrix der Schätzungen lesen und damit arbeiten. Dies ist nützlich für die Schätzung simultaner Konfidenzintervalle (zumindest für große Datensätze):
nls
unterstützt Profildiagramme für die Parameter und gibt detailliertere Informationen zu deren Unsicherheit:Hier ist einer der drei Ausgabediagramme, die die Variation vona :
quelle
res <- residuals(fit); res %*% res