Parametergrenze für nichtlineare KurvenanpassungIch versuche, Datenpunkte für über 1000 Stichproben anzupassen. Ich habe festgestellt, dass die biexponentielle 5P- Funktion die besten Anpassungsergebnisse liefert. Dieselben Stichproben mit ein oder zwei Datenpunkten, die leicht außerhalb des Trends liegen, machen die Anpassung jedoch sehr merkwürdig. Für eine typische Population liegen die Parameter der Zerfallsrate bei etwa 0,2, und für diese Stichproben liefert die Anpassung Ergebnisse im Bereich von 10. „Parametergrenze“ und erhöhte Iterationslimitoptionen bei der nichtlinearen Anpassung lösen das Problem. Eine manuelle Anpassung über die GUI ist jedoch nicht möglich.
Gibt es eine Möglichkeit, Parametergrenzen und Iterationsnummern „global“ (für alle Beispiele) festzulegen?
Ich habe auch die Skriptoption ausprobiert, bin jedoch mit JSL-Skripting nicht vertraut und konnte mit dem folgenden Skript keine passenden Ergebnisse erzielen.
Names Default To Here( 1 );
dt = Current Data Table();
obj = Nonlinear( Y( :data ), X( :data Predictor ), By( :ID ) );
obj << Go;
obj << Parameter Bounds(
asympt( 14, 22 ),
scale1( 0, 100 ),
decayrate1( -0.2, 0.1 ),
scale2( -100, 0 ),
decayrate2( -0.2, 0.1 )
);
obj << Iteration Limit( 10000 );
obj << Finish;
G = obj << Get Estimates;
Show( G );
obj << Report View( "Summary" );
obj << get estimates;
Hinweis: Original JSL von txnelson in die JSL-Anzeigebox verschoben
Grundlegende Datenanalyse und -modellierungBetreff: Parametergrenze für nichtlineare KurvenanpassungHallo @eugur ,
Ich zeige Ihnen, wie Sie dies ohne JSL erreichen, damit Sie den Prozess verstehen (abgesehen vom Anfang). Erstellen Sie zunächst eine Formelspalte, die die leeren Parameterwerte bereitstellt, die dann angepasst werden können, um die beste Anpassung für Ihre Daten in der nichtlinearen Plattform zu finden. Erstellen Sie zunächst die Formelspalte (ich habe hier ein kurzes Skript hinzugefügt, Sie können es aber auch manuell erstellen):
dt=current data table();
dt<
<NEW column=""></NEW>
<P>Sobald alles abgeschlossen ist, öffnen Sie die nichtlineare Plattform, fügen Sie Ihre Formelspalte in die Rolle „X, Prädiktorformel“ und Ihr gewünschtes Y in den Y-Bereich ein und klicken Sie auf „Ausführen“. Sobald die Plattform hochgefahren ist, klicken Sie auf den roten Button, wählen Sie „Parametergrenzen“ und geben Sie die gewünschten Grenzwerte ein.</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><span class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76921iB16E7281FC0917D7/Ben_BarrIngh_0-1749874842390.png" role="button" title="Ben_BarrIngh_0-1749874842390.png" alt="Ben_BarrIngh_0-1749874842390.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76922i0E0E2181BA64F9AD/Ben_BarrIngh_1-1749874859915.png" role="button" title="Ben_BarrIngh_1-1749874859915.png" alt="Ben_BarrIngh_1-1749874859915.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <BR /> <P>Sie können dann die nichtlineare Plattform mit „Go“ ausführen, um die Parameter mit diesen Grenzen zu schätzen.</P> <BR /> <P>Hoffe, das hilft!</P> <P>Danke,</P> <P>Ben</P> <BR /> <BR />
Betreff: Parametergrenze für nichtlineare KurvenanpassungHallo Ben,
Vielen Dank für Ihre Antwort, aber das kann ich bereits, und das ist nicht das, wonach ich frage. Wie ich in meinem Beitrag erwähnt habe, versuche ich, Datenpunkte für über 1000 Stichproben anzupassen, was bedeutet, dass über 1000 Kurven angepasst werden müssen. Daher müsste ich auf einer nichtlinearen Plattform auch die Spalte „ID“ im Abschnitt „Nach“ verwenden. (Die Option „Gruppieren“ funktioniert hier irgendwie nicht, während sie bei „Kurve anpassen“ funktioniert.)
Wenn Sie mehrere Proben haben, müssen Sie die oben beschriebenen Schritte (Klicken Sie auf den roten Button, wählen Sie „Parametergrenzen“ und geben Sie die gewünschten Grenzen ein) für jede Probe manuell durchführen. Das mag bei ein paar Proben problemlos funktionieren, aber nicht bei über 1000 Proben. Ich möchte, dass Sie Parametergrenzen und Iterationsanzahl für alle über 1000 Proben gleichzeitig festlegen können.
Betreff: Parametergrenze für nichtlineare KurvenanpassungHallo @eugur ,
Wenn Sie den Gruppenterm nicht verwenden, werden die festgelegten Parametergrenzen global für alle über 1000 Stichproben festgelegt. (Der Grund, warum die Gruppierung im nichtlinearen Modus nicht funktioniert, liegt darin, dass die Gruppe selbst in die Vorhersageformel integriert werden muss, mit der Sie NL füttern.) Ihr Skript sollte funktionieren, aber Sie müssen „Go“ nicht in der zweiten Zeile ausführen. Deshalb werden die Parametergrenzen nicht hinzugefügt, da die Plattform läuft, bevor Änderungen vorgenommen werden können. Hier ist ein Beispiel, das dann das Tool „Kombinierte Datentabelle“ verwendet, um einen einzelnen Bericht zu erstellen, der leicht zeigt, wie sich die Werte in jeder Stichprobe verändert haben.
dt=current data table();
id_no=N Items(Associative Array(dt:Batch)<
<GET keys=""></GET>
<BR /> <BR />
Betreff: Parametergrenze für nichtlineare Kurvenanpassung„Fit Curve“ funktioniert am besten in Fällen mit vielen Kurven-IDs. Wenn Ihre Anpassungsfunktion jedoch nicht in der Bibliothek vorprogrammierter Funktionen von „Fit Curve“ enthalten ist, ist „Fit Nonlinear“ erforderlich.
Wie Sie bemerkt haben, funktioniert „Gruppieren“ in „Nichtlinear anpassen“ anders und ist in diesem Fall nicht die richtige Wahl. Ich empfehle, die Kurven mit „Nach“ zu gruppieren.
I prefer using the following syntax for this. Could you try this and let us know if it works:</CODE></P>
<PRE><CODE class=" language-jsl">Nonlinear(
Y( :data ),
X( :data predictor),
By( :ID ),
Parameter Bounds(
asympt( 14, 22 ),
scale1( 0, 100 ),
decayrate1( -0.2, 0.1 ),
scale2( -100, 0 ),
decayrate2( -0.2, 0.1 ) ),
Iteration Limit( 10000 )
);
Betreff: Parametergrenze für nichtlineare KurvenanpassungDanke Ben,
Funktionell funktioniert das. Ich glaube aber, dass die nichtlineare Plattform einen anderen Solver verwendet. Fast 50 % der Anpassungsergebnisse sind nicht akzeptabel.
Betreff: Parametergrenze für nichtlineare KurvenanpassungHallo Christian,
Vielen Dank für Ihre Antwort. Sie haben Recht, „Fit Curve“ scheint deutlich besser zu funktionieren. Die von mir verwendete Anpassungsfunktion ( Biexponential 5P ) ist in der Bibliothek vorprogrammierter Funktionen von „Fit Curve“ enthalten. Wie bereits erwähnt, sind die Anpassungsergebnisse bei gleichen Stichproben (5 %) jedoch sehr merkwürdig, weshalb ich die Option „Fit Nonlinear“ ausprobieren wollte. Selbst mit den Grenzwerten kann „Fit Nonlinear“ jedoch nur etwa 50 % der Stichproben genau anpassen.
Meine Fragen sind also:
- Ist es möglich, Parametergrenzen für die Anpassungskurve hinzuzufügen?
– Wenn nicht, ist es möglich, für „Fit Nonlinear“ dieselben Solver und Einstellungen wie für „Fit Curve“ zu verwenden?
Betreff: Parametergrenze für nichtlineare KurvenanpassungHallo @eugur , Sie können versuchen, Ihr Iterationslimit zu erweitern oder sogar die Verwendung eines SSE-Rasters in Betracht ziehen, um zu sehen, ob es überhaupt möglich ist, geeignete Parameterwerte für Ihre Beispiele zu erhalten. Sie sollten auch in Erwägung ziehen, andere Iterationen als die standardmäßig verwendete Option „Netwon“ auszuführen.
Der Grund dafür, dass 50 % der Ergebnisse einzeln fehlschlagen, liegt darin, dass bei Verwendung aller Stichproben die Auswirkung auf die Gesamtanpassung des SSE-Modells reduziert ist und somit die Wahrscheinlichkeit, dass ein einzelner Punkt einen Fehler verursacht, geringer ist. Bei der Analyse nur eines einzelnen Punkts ist ein Fehler hingegen wahrscheinlicher.
Betreff: Parametergrenze für nichtlineare KurvenanpassungHallo eugur,
1) Soweit mir bekannt ist, unterstützt Fit Curve keine Parametergrenzen. 2) Fit Curve verwendet einen anderen Algorithmus als Nonlinear, daher kann nicht derselbe Solver verwendet werden.
Fit Curve und Fit Nonlinear sehen auf den ersten Blick ähnlich aus, unterscheiden sich aber unter der Haube deutlich. Nonlinear ist ein traditioneller nichtlinearer Regressionslöser mit der Methode der kleinsten Quadrate. Er bietet maximale Flexibilität, erfordert aber auch den größten manuellen Aufwand. Die Anpassung nichtlinearer Regressionen ist im Gegensatz zu linearen Regressionen nichtdeterministisch, sodass keine Garantie dafür besteht, dass eine gegebene Menge anfänglicher Schätzungen immer konvergiert, selbst bei „ähnlichen“ Datensätzen. Dies ist kein JMP-spezifisches Problem; meiner Erfahrung nach erfordern die meisten nichtlinearen Löser gelegentliche manuelle Anpassungen, was die Stapelverarbeitung von Hunderten von Datensätzen zu einer interessanten (aber nicht unmöglichen!) Herausforderung macht. Hier kommt die Fit Curve-Plattform von JMP ins Spiel.
Fit Curve ist ein Spezialfall mit einer kleinen Bibliothek optimierter, voreingestellter Funktionen. Es wird kein allgemeiner nichtlinearer Regressionslöser verwendet, sondern jede Funktion nutzt einen speziell dafür entwickelten Algorithmus. Dadurch ist es außergewöhnlich schnell und konvergiert mit höherer Wahrscheinlichkeit für eine Vielzahl von Daten. (Ich bin weder Softwareentwickler noch Mathematiker, daher bitte ich um Verständnis für die nicht-technische Erklärung; dies entspricht lediglich meinem Grundverständnis!). Soweit mir bekannt ist, unterstützt Fit Curve keine Parametergrenzen, möglicherweise weil diese normalerweise nicht benötigt werden. Sollten Sie feststellen, dass Parametergrenzen für Ihre Situation erforderlich sind, greifen wir wieder auf die nichtlineare Plattform zurück. Ben hat einige gute Ideen vorgeschlagen, und es gibt weitere Möglichkeiten, die man mit nichtlinearer und Skripterstellung ausprobieren kann, falls Fit Curve nicht funktioniert. Mein Vorschlag ist jedoch, immer zuerst Fit Curve auszuprobieren und Fit Nonlinear nur als Backup-Option zu verwenden, falls das nicht funktioniert.
Hier sind einige Links, die interessant sein könnten:
Beispiel für das Festlegen von Parametergrenzen
Statistische Details für Fit-Kurvenmodelle
Nichtlineare vs. angepasste Kurve, die unterschiedliche Ergebnisse liefert? - JMP-Benutzergemeinschaft
-Christian