Segmentierte Regression<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Weiß jemand, wie man eine segmentierte Regression durchführt und den Haltepunkt (wo sich die beiden Linien treffen) in JMP berechnet?
Betreff: Segmentierte RegressionFür diejenigen, die dies noch nicht gesehen haben, gibt es hier einen möglicherweise nützlichen Blog, den mein Kollege geschrieben hat @JerryFish Informationen zum Erstellen und Bearbeiten stückweiser Anpassungen in JMP (unter Verwendung der nichtlinearen Plattform): Stückweise nichtlineare Lösungen Teil 3: Verwenden des Formeleditors von JMP zur Lösung nach unbekannten Parametern.
Ich füge dies hier ein, da es gut zu dieser Diskussion passt.
Betreff: Segmentierte RegressionIch habe das erst kürzlich ausprobiert, es macht für mich mehr Sinn als das Dienstprogramm für die nichtlineare Plattform.Mich würde interessieren, wie sich das Iterationsschema an meine Lösung anpasst?Ich habe versucht, einen angemessenen Wert von d (den Schnittpunkt) für meine Daten auszuwählen, und es schien besser zu funktionieren, als ich den Wert von d „gesperrt“ und im Plattformdialogfenster, das aus generiert wird, erneut auf die Schaltfläche „Los“ geklickt habe Nichtlineare Plattform gestartet mit:
Nonlinear( Y( :Y ), X( :Ypred ), Newton, Finish );
Teil des Codes.
Gibt es eine einfache Möglichkeit, dieses kurze Skript so zu ändern, dass stattdessen eine Datentabelle aufgerufen wird? (oder die Werte für X und Y manuell einzugeben)?
Ich bin mir sicher, dass dies eine „JSL-Anfängerfrage“ ist, also entschuldige ich mich im Voraus ...
Ich habe das auf komische Weise aufgefasst und einfach Folgendes in meine gespeicherte Datendatei mit den Spalten {X, Y, Ypred} und meinen ausgefüllten Daten kopiert:
Parameter( {a = 5, b = 45, c = -100, d = 0.109}, a + b * :X + c * (:X - d) * (:X > d) );
Nonlinear( Y( :Y ), X( :Ypred ), Newton, Finish );und so bin ich zu meinem Ergebnis für meine Daten gekommen!Nochmals vielen Dank für diesen Beitrag zur Community.
Betreff: Segmentierte RegressionDanke, ich werde es ausprobieren!
Betreff: Segmentierte RegressionWie Dodo vorschlägt, kann eine stückweise Regression mit der nichtlinearen Plattform durchgeführt werden. Nachfolgend finden Sie ein Beispiel, das auf dem Beispiel mit dem gebrochenen Stock oben basiert.
New Table( "piecewise",
Add Rows( 20 ),
New Column( "X",
Continuous,
Set Values( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] )
),
New Column( "Y",
Numeric,
Set Values( [15, 12, 27, 31, 26, 31, 42, 47, 56, 56, 47, 46, 36, 44, 38, 35, 34, 35, 25, 19] )
),
New Column( "Ypred",
Numeric,
Formula( Parameter( {a = 20, b = 1, c = -10, d = 10}, a + b * :X + c * (:X - d) * (:X > d) ) )
)
);
Nonlinear( Y( :Y ), X( :Ypred ), Newton, Finish );
Betreff: Segmentierte RegressionWenn es sich um eine einfache, zerbrochene Beziehung handelt, könnten Sie so etwas tun:
// Create a broken stick relationship with some noise;
x = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
y = [15, 12, 27, 31, 26, 31, 42, 47, 56, 56, 47, 46, 36, 44, 38, 35, 34, 35, 25, 19];
expr_FX = expr(a + b*x + c*(x-d):*(x>d));
expr_SSE = expr(sum((y-expr_FX)^2));
// Supply a set of starting values;
a = 20; b = 1; c = -10; d = 15;
print("Starting values:");
show(a, b, c, d);
sse = minimize(expr_SSE, {a, b, c, d}, << tolerance(1e-5));
print("Final estimates:");
show(a, b, c, d);
show(eval(expr_FX));
Ich habe das Obige auf dem Beispiel der kleinsten Quadrate im JMP 10-Handbuch, Kapitel 8, basiert und das Exponentialmodell im Beispiel durch eine gebrochene Stabbeziehung im Ausdruck ersetzt.Der Bruchpunkt ist der Parameter d, da dies der x-Wert ist, bei dem sich die Steigung der Linie ändert.Beachten Sie, dass Sie beim Multiplizieren der beiden Matrizen (xd) und (x>d) das elementweise Produkt benötigen:* im Gegensatz zu einer einfachen Multiplikation.Sie benötigen wahrscheinlich auch einen relativ guten Startwert für den Haltepunkt, damit der Ausdruck konvergiert.In diesem Beispiel wird die gesamte Ausgabe in das Protokoll geschrieben.
Vermutlich könnte dies auch in der nichtlinearen Plattform (Analysieren | Modellieren | Nichtlinear) eingerichtet werden, aber ich habe das noch nicht ausprobiert, da ich mit der Verwendung von Formeln in Datentabellen nicht sehr vertraut bin.Hilft das überhaupt?