Ich versuche, ein Skript zu erstellen, das die Ergebnisse der nichtlinearen Modellanpassung erfasst und diese in einem Diagramm ausgibt. Der Datensatz wurde im Laufe der Zeit kontinuierlich erfasst, an den ich ein nichtlineares Modell angepasst habe (siehe beigefügtes Bild). Ich habe 12 verschiedene Proben, für die ich das gleiche Diagramm habe, wenn Sie nach unten scrollen möchten.
Ich möchte das Diagramm jedoch so darstellen, dass ich die erfassten Daten nur für die Zeilen sehen kann, die den Tagen 0, 1, 2, 3, 4, 5 usw. bis 21 Tage entsprechen, ohne die Kurve von zu beeinträchtigen das Modell nach Muster. In diesem Fall möchte ich die experimentellen Daten als Streudiagrammdaten und das Modell als kontinuierliche Kurvendaten oder glatte Kurve haben
Wie mache ich das?
Der Graph Builder scheint bei der ersten Herausforderung nicht gleichzeitig experimentelle Daten und Modell darzustellen.
Meine Überlegung war, dass ich möglicherweise eine Art Datenfilter verwenden könnte, den ich bei jedem Aufruf des Skripts anwenden könnte, ohne die Modellspalte zu beeinträchtigen. Muss ich eine neue Datentabelle speziell für die Modelle mit den neuen Parameterschätzungen für jede der 12 Stichproben erstellen und dann den Graph Builder aufrufen?
Ich habe auch versucht, den Diagramm-/Legacy-/Overlay-Plot auf der JMP-Menüregisterkarte zu verwenden. Dies scheint sowohl Daten- als auch Modellkurven darzustellen, aber in diesem Fall wurde mir klar, dass JMP die Parameterschätzungen nicht einzeln auf jede Stichprobe in der Modellspalte angewendet hat, nachdem ich die Parameterschätzungen für jede Stichprobe akzeptiert und gespeichert hatte. In diesem Fall verwendet die Modellformel nur die Parameter, die für die Probe geschätzt wurden, die zuerst in der Datentabelle erscheint, und verwendet diese für die folgenden Proben.
Muss ich dann eine neue Datentabelle erstellen, die 12 Spalten mit der Modellformel unter Verwendung der ermittelten Parameterschätzungen für jede Probe generiert, um sowohl Modell- als auch experimentelle Daten für jede Probe zusammen darstellen zu können?
Ich hoffe, das ist klar. Ich kann einen Screenshot der Datentabelle usw. hochladen
Ich versuche, ein Skript zu schreiben, das eine neue Spalte für die neuen Parameterschätzungen öffnet.
Nachdem ich die nichtlineare Anpassung ausgeführt habe, erhalte ich die Schätzungen und Fehler. Ich behalte dann nur die Datentabellen von Interesse und versuche, die Werte von Interesse irgendwie dazu zu bringen, sie in einer neuen Spalte mit derselben Modellformel zu verwenden. Die Idee wäre, die Modellparameter basierend auf den Schätzungen zu spezifizieren.
Ich brauche Hilfe, da ich nicht weiß, ob dies der richtige Weg ist oder ob ich andere Funktionen verwenden muss. Das folgende Skript ist möglicherweise etwas kompliziert zu befolgen, aber das liegt wahrscheinlich daran, dass ich kaum Programmiererfahrung habe. Das Drehbuch funktioniert offensichtlich
@Mark_Bailey schrieb:
Da ich gerade unterrichte, steht es mir nicht frei, dies zu überprüfen, aber Nonlinear speichert möglicherweise die Formel mit den verschiedenen Parametersätzen für Sie. Hier ist die Funktion Match() hilfreich. Sie gleichen die Gruppe ab und replizieren das Modell für jedes Ergebnis, wenden jedoch die eindeutigen Parameterschätzungen für jede Gruppe an. Es entsteht eine Art Verzweigung. Wie eine CASE-Anweisung in einigen Sprachen.
bis der Teil in FETT:
col9 = Neue Spalte("Modell");
col9<< Formel festlegen (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 - :Tage))) + Y2_Y2_0 * Exp(-((K2_K2_0 * Exp()) / Y2_Y2_0) * (P2_P2_0 - :Tage)))),0 )));
col10=newcolumn("Err");
col10<< set Formula((:Average - :Model) ^ 2);
col10< col10<
obj = Nonlinear(Y( :Average ), X( :Model ), Loss( :Err ), Iteration Limit( 5000 ), By( :Sample ));
obj << go;
//gibt eine Liste von Vektoren zurück, wobei jeder Vektor die Parameterschätzungen enthält
obj << Schätzungen abrufen;
//siehe auch Get SSE, Get Parameter Names, Get CI
//Erstellen Sie alternativ eine Tabelle
_xx = obj << Xpath("//OutlineBox[@helpKey='Nonlinear Solution']");
//nur 2 Gruppen, daher werden nur 2 gefunden; jede enthält zwei Untertabellen
fit_dt = (_xx[1]< est_dt = (_xx[1]< fit_dt << set Name("NonLin Fit Errors");
est_dt << set Name("NonLin Fit Estimates");
Namen standardmäßig hier( 1 );
DontClose = {"dt4", "NonLin Fit Errors", "NonLin Fit Estimates"}; // Beispielnamen von Tabellen, die Sie verlassen möchten
// Schleife rückwärts durch die Liste, damit sich die Tabellennummern nicht ändern
For( i = N Table(), i >= 0, i--,
If( Enthält( DontClose, Datentabelle( i ) << get name ),
Weitermachen(),
Close( Datentabelle( i ), „Kein Speichern“ )
)
);
dt = Data Table("NonLin Fit Estimates");
dt2<
myList=:Estimates<
dt0 = Datentabelle („dt4“);
dt0<< New Column("Angepasstes Modell nach Stichprobe");
col11="Angepasstes Modell nach Stichprobe";
col11 << Formel festlegen (Parameter({Y1_Y1_0, K1_K1_0, P1_P1_0, Y2_Y2_0, K2_K2_0, P2_P2_0}, 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), Set Property("Predicting", {:Average , Creator("Nonlinear")}), By (:Sample)));
Für jede Zeile(col11= Formel festlegen (Match("Parameter", "Schätzungen")));
col11<
col11<
Irgendwelche Vorschläge?
Da ich gerade unterrichte, steht es mir nicht frei, dies zu überprüfen, aber Nonlinear speichert möglicherweise die Formel mit den verschiedenen Parametersätzen für Sie. Hier ist die Funktion Match() hilfreich. Sie gleichen die Gruppe ab und replizieren das Modell für jedes Ergebnis, wenden jedoch die eindeutigen Parameterschätzungen für jede Gruppe an. Es entsteht eine Art Verzweigung. Wie eine CASE-Anweisung in einigen Sprachen.
Nein, anstatt ein breites Format zu verwenden (Antworten werden in einem Dutzend Datenspalten gespeichert), verwenden Sie das hohe Format (Antworten werden in einer Spalte gespeichert und eine zweite Spalte wird zur Identifizierung der Stichprobe verwendet). Verwenden Sie nun die Proben-ID in der By-Rolle der meisten Plattformen oder die Group-Rolle in der Nonlinear- oder Plot Curve-Plattform.