Ich versuche den besten Weg zu finden, ein nichtlineares Modell zu melden, das zu meinen experimentellen Daten passt.
Es ist mir gelungen, ein Skript zu schreiben, das zu einem nichtlinearen Modell passt und mithilfe der Verlustfunktion die Parameterschätzungen findet. Anschließend werden die einzelnen Parameterschätzungen und die nichtlinearen Fehler gemeldet.
Allerdings möchte ich auch den RMSE oder R-Quadrat der resultierenden Anpassung erhalten. Ist dies für nichtlineare Modelle nicht verfügbar? Oder muss ich einen zusätzlichen Analyseschritt hinzufügen?
Beim interaktiven Ausführen der nichtlinearen Analyseplattform zeigt das resultierende Diagramm sowohl die experimentellen Daten als auch die Modellkurve. Bei der automatischen Ausführung des Skripts werden jedoch nur die experimentellen Daten angezeigt. Weiß jemand, warum das passiert? Fehlt mir etwas im Skript unten?
Könnte jemand Literatur/Bücher/Links bereitstellen, um die Diagramme der Daten im Vergleich zur resultierenden Modellanpassung zu erhalten und das R-Quadrat der Anpassung anzugeben?
Das Skript, das ich derzeit für die nichtlineare Modellanpassung verwende, ist das folgende:
col1 = New Column( "Model" );
col1 << set formula(
Parameter(
{Y1_Y1_0 = 0.2, K1_K1_0 = 0.01, P1_P1_0 = 0.004, Y2_Y2_0 = 0.15, K2_K2_0 = 0.06, P2_P2_0 = 0.3},
If( :Days > 0,
Y1_Y1_0 * Exp( -Exp( ((K1_K1_0 * Exp()) / Y1_Y1_0) * (P1_P1_0 - :Days) ) ) + Y2_Y2_0 *
Exp( -Exp( ((K2_K2_0 * Exp()) / Y2_Y2_0) * (P2_P2_0 - :Days) ) ),
0
)
)
);
col2 = New Column( "Err" );
col2 << set Formula( Sum( (:Average - :Model) ^ 2 ) );
col2 << Evalformula;
col2 << Get formula;
obj = Nonlinear( Y( :Methane Yield ), X( :Model ), Loss( :Err ), Iteration Limit( 600 ), By( :Sample ) );
obj << go;
//returns a list of vectors where each vector, contains the parameters estimates
obj << get estimates;
//also see Get SSE, Get Parameter Names, Get CI
//Alternately, make a table
_xx = obj << Xpath( "//OutlineBox[@helpKey='Nonlinear Solution']" );
//only 2 groups so only 2 are found; each contains two sub tables
fit_dt = (_xx[1] << Find( Table Box( 1 ) )) << Make Combined Data Table;
est_dt = (_xx[1] << Find( Table Box( 2 ) )) << Make Combined Data Table;
fit_dt << set Name( "NonLin Fit Errors" );
est_dt << set Name( "NonLin Fit Estimates" );
Ihr RMSE ist der Sqrt Avg Loss.
Ich kenne die Ursache für die fehlende Handlung nicht.
Danke Mark.
Ich habe die Verlustfunktion wie von Ihnen vorgeschlagen geändert. Ich habe die Anpassung durchgeführt, kann die Modellkurve jedoch immer noch nicht auf dem Diagramm sehen.
Bei meiner Lösung erhalte ich: Avg Loss und Sqrt Avg Loss. Bedeutet das, dass mein RSME dann der durchschnittliche Verlust ist?
Der RMSE wird in der Lösungsübersicht angegeben:

Das R-Quadrat ist nicht verfügbar, da Sie zwei Modelle benötigen: das angepasste Modell und das reduzierte Modell. Beim nichtlinearen Modell gibt es kein reduziertes Modell. (Das reduzierte Modell in der OLS-Regression ist das Modell mit nur dem konstanten Intercept-Term.)
Sie definieren die Standardverlustfunktion in „Nichtlinear“ fälschlicherweise neu. Der Standardverlust ist der kleinste quadratische Fehler. Aus Ihrem Skript geht hervor, dass Sie den kleinsten Fehlerquadrat verwenden möchten. Ihre Spaltenformel sollte den Verlust für jede Beobachtung ergeben, nicht für die gesamte Stichprobe. Ihre Verlustformel sollte also nur die quadrierte Differenz sein. (Das heißt, berechnen Sie nicht die Summe der quadrierten Differenzen.) Mit diesem Ansatz erhalte ich anstelle des Standardverlusts:

Die Verwendung eines benutzerdefinierten Verlusts ändert also die Informationen in der Lösungsübersicht in den Gesamtverlust (in diesem Fall SSE), den durchschnittlichen Verlust (in diesem Fall MSE) und den durchschnittlichen quadratischen Verlust (in diesem Fall RMSE).
Ich habe das Skript von Nonlinear gespeichert und ausgeführt. Das Datendiagramm zeigt immer noch die Kurve, die den Graphen der nichtlinearen Funktion darstellt.