Dies ist der dritte einer Reihe von Beiträgen zum Anpassen von stückweise stetigen Funktionen an Datensätze. Ich beginne jeden Beitrag mit Links zu allen anderen Beiträgen der Reihe. Sie sind:
Zu Teil 3...
Einführung
Wenn Sie meinen vorherigen Beiträgen in dieser Serie gefolgt sind, wissen Sie, dass wir jetzt Gleichungen entwickelt haben, die 10 unbekannte Parameter enthalten, die bestimmt werden müssen, um die Teile des Beispielproblems am besten zu erfüllen. Wie machen wir das in JMP ?
Zuerst müssen wir den Formeleditor von JMP verwenden, um unsere Gleichungen und unbekannten Parameter einzugeben. Ich gehe davon aus, dass der Leser mit dem Formeleditor allgemein vertraut ist. (Wenn nicht, hier ist a kurzes Video zum Erstellen von Formeln und ein längeres Video mit viel mehr Details zum Formel-Editor .)
Einrichten von Parametern im Formeleditor von JMP
Was Ihnen vielleicht nicht bewusst ist, ist die Möglichkeit im Formeleditor, Parameter einzurichten. Parameter sind lokale Variablen der Formel, die Sie erstellen. Sie werden über die Dropdown-Menüs aufgerufen (Standard ist Tabellenvariablen, wechseln Sie zu Parameter, wie in Abbildung 1 gezeigt).
Abbildung 1: Zugriff auf Parameter im Formeleditor
Dadurch wird eine Option zum Hinzufügen eines "Neuen Parameters" zur Formel angezeigt. Lassen Sie uns ein einfaches Beispiel machen und einen Parameter namens "a0" zur Parameterliste hinzufügen. Klicken Sie auf Neuer Parameter, ändern Sie dann den Parameternamen in "a0" und geben Sie ihm einen Wert von 1:
Abbildung 2: Einen neuen Parameter anlegen und ihm einen Initialwert geben
- "Name" ist willkürlich. Sie können einen beliebigen gültigen JSL-Variablennamen wählen.
- "Wert" ist der Startwert für diesen Parameter. Sie müssen einen Startwert angeben. Manchmal (je nach gewählter Formel) kann der Startwert wichtig sein und sollte so gewählt werden, dass er nahe am tatsächlichen Wert liegt, wie Sie sich vorstellen können. (Dies hilft, später Konvergenzprobleme zu vermeiden.) In diesem Fall habe ich keine Ahnung, wie der Wert aussehen soll, also wähle ich nur willkürlich einen Startwert von 1.
Jetzt können wir diesen neuen Parameter "a0" in einer Formel verwenden, als wäre es eine Spaltenvariable. Fügen wir es einfach zu den Werten in der Spalte mit der Bezeichnung "y" hinzu. Doppelklicken Sie auf a0 in der Parameterliste (es sollte im Formelfenster erscheinen), geben Sie dann "+" ein und doppelklicken Sie dann auf "y" in der Spaltenliste. Dies sollte die folgende Formel ergeben:
Abbildung 3: Verwendung eines Parameters in einer Formel
Wenn wir nun auf OK klicken und das Ergebnis in der Datentabelle betrachten, haben wir
Abbildung 4: Ergebnisse der Verwendung eines Parameters in einer Formel
Die Formel erkennt nun also den aktuellen Wert des Parameters a0 und wendet ihn entsprechend an. Dieses wichtige Konzept wird im nächsten Blogbeitrag verwendet, wenn wir die JMP Nonlinear Platform verwenden, um die unbekannten Parameter zu lösen.
Eingabe von Parametern für die stückweisen Funktionen
In Teil 2 dieser Blogserie haben wir die fünf einfachen Polynome entwickelt, die zwischen Breakpoints in der Beispieldatenreihe angewendet werden können. Diese Polynome hatten sechs unbekannte Parameter: a0, b1, b2, c1, d1 und d2. Wir hatten auch vier Schnittpunkte, die die Regionen definieren, in denen die Polynome aktiv waren: X1, X2, X3 und X4. Wir müssen jeden dieser Parameter zusammen mit vernünftigen Startwerten zu unserer Formelparameterliste hinzufügen. Wenn Sie fertig sind, sieht die Parameterliste wie folgt aus:
Abbildung 5: Alle zehn eingegebenen und initialisierten Parameter für unser stückweises Beispiel
Beachten Sie, dass ich für jeden der Koeffizienten in den Polynomen Startwerte von "1" angenommen habe. Für die Breakpoints X1 bis X4 habe ich mich dafür entschieden, die Werte basierend auf dem "Augieren" zu schätzen, wo ich dachte, dass sie auftreten könnten. Dies gibt JMP einfach einen besseren Ort, um mit der Suche nach den Breakpoints zu beginnen.
Eingabe der stückweisen Formeln - einschließlich eines booleschen Tricks!
Jetzt wissen Sie, wie Sie Parameter im Formeleditor einrichten, und Sie wissen auch, wie Sie jede der fünf in Teil 2 gezeigten stückweisen Gleichungen in den Formeleditor eingeben. Aber wie geben wir ALLE FÜNF stückweisen Gleichungen in dieselbe Formel ein?
Eine Möglichkeit besteht darin, eine große IF-Anweisung zu verwenden, zB "Wenn x @PatrickGiuliano , der in einem früheren Diskussionsthread der JMP-Community einen hilfreichen Trick gepostet hat.
JMP erkennt Boolesche Operatoren (And, Or, Nor usw.). Wenn in einer Formel ein boolescher Operator verwendet wird, gibt die boolesche Logik eine 1 zurück, wenn sie wahr ist, und eine 0, wenn sie falsch ist. So können wir einen Operator wie (X1<:x & :x<=X2) einrichten. Dieser Operator gibt eine 1 zurück, wenn der Wert in der Spalte "x" (im Ausdruck als ":x" bezeichnet) zwischen den Parametern X1 und X2 liegt, andernfalls 0. Wir könnten also einfach die stückweise Gleichung für das X1-X2-Segment mit dem obigen booleschen Ausdruck multiplizieren. Wenn der Wert von x im richtigen Bereich liegt, wird die Segmentgleichung aktiviert. Wenn nicht, geben wir 0 zurück. Wir würden dann dasselbe für alle anderen Bereiche tun und alle Gleichungen zusammenfassen.
Wenn wir all das tun, erhalten wir eine Formel, die wie folgt aussieht:
Abbildung 6: Komplette stückweise Formel (im Formeleditormodus angezeigt)
Und unten sind die gleichen Informationen im JSL-Eingabeformat, falls Sie es vorziehen:
Abbildung 7: Vollständige stückweise Formel (dargestellt im JSL-Modus)
Zusammenfassend haben wir in den Abbildungen 6 und 7 im Wesentlichen eine Formel in einer neuen Spalte (genannt ypred) erstellt, die:
- Definiert 10 unbekannte Parameter (und gibt jedem Parameter einen geeigneten Startwert), die in der Formel verwendet werden.
- Beschreibt vier stückweise Gleichungen, die jeweils ihre entsprechenden Parameter verwenden.
- Aktiviert jede stückweise Gleichung durch Multiplizieren mit einer geeigneten Booleschen Ungleichung, die die Bereiche für jede Gleichung beschreibt.
- Summiert die vier Gleichungen, um die endgültige Formel zu erhalten.
Ziemlich cool...
Als nächstes in der Reihe
Beim nächsten Mal werden wir endlich die Gleichungen mit der nichtlinearen Plattform verwenden, um nach den besten Anpassungsparametern aufzulösen. Wir werden auch Auswahlmöglichkeiten für Konvergenzkriterien und Algorithmen diskutieren.
Hallo @JerryFisch , Ich habe diese Blog-Beiträge bisher wirklich genossen!Für jemanden, der nicht jeden Tag Parameteroptimierung durchführt, ist es großartig, diese Ressource zu haben, auf die er zurückgreifen kann, um eine Auffrischung darüber zu erhalten, wie es geht und wie man mit fortgeschritteneren Fällen wie der hier behandelten stückweisen nichtlinearen Anpassung umgeht.
Kurze Frage zu diesem Beitrag: Wenn ich simulierte Daten generieren wollte, die einen allmählich zunehmenden (oder abnehmenden) Trend über die "Zeit" erzeugten (wir können der Einfachheit halber die Zeilenreihenfolge verwenden), wie könnte ich dies in JMP parametrisieren? (Oder gibt es einen einfacheren Weg ohne Modellparametrisierung, zB mit einer Kombination aus Instant-Spaltenformeln?).
Danke!@PatrickGiuliano