JSL-Skript – Ergebnis der Vorhersageformel abrufenHallo,
Ich versuche, den vorhergesagten Wert zu erhalten, nachdem ich die X in einer Vorhersageformel festgelegt habe.
Wenn beispielsweise Y = X1 + X2, möchte ich eine neue Zeile erstellen, X1 = 2 und X2 = 4 festlegen und den vorhergesagten Wert von Y = 6 ermitteln.
Ich dachte, der einfachste Weg, dies zu tun, wäre, die Vorhersageformel in einem neuen Satz von Spalten zu speichern.
Ich würde dann eine neue Zeile hinzufügen und alle X setzen.
Greifen Sie dann einfach auf den Zeilenwert der Vorhersageformel zu.
Dies funktioniert jedoch nicht. Das Protokoll zeigt, dass der Wert ein „.“ zurückgibt. Wenn ich das Skript zweimal ausführe, sodass mehrere Zeilen erstellt werden, wird der Wert korrekt zurückgegeben. Wenn ich zwei Zeilen hinzufüge und das Skript nur einmal ausführe, erhalte ich immer noch „null“ oder „.“ in der Protokolldatei. Es scheint einen Grund dafür zu geben, dass JMP das Skript zweimal ausführen muss, um das vorhergesagte Formelergebnis einer neu hinzugefügten Zeile mit festgelegten X-Werten zu erhalten.
Gibt es eine bessere Möglichkeit, mithilfe von Skripten vorhergesagte Werte aus Vorhersageformeln abzurufen?
Danke schön,
Nate
Betreff: JSL-Skript – Ergebnis der Vorhersageformel abrufenGroßartig. Es läuft jetzt und funktioniert wie erwartet. Vielen Dank.Betreff: JSL-Skript – Ergebnis der Vorhersageformel abrufenIch habe vergessen, dass es in JMP Pro zusätzliche PLS-Funktionalität gibt, die in der regulären Version nicht enthalten ist. Für JMP wird es ähnlich sein, aber etwas einfacher:
NamesDefaultToHere(1);
// Get some data
dt = Open( "$SAMPLE_DATA/Baltic.jmp" );
// Do a PLS fit in JMP (also works in JMP Pro)
pls = dt << Partial Least Squares(
Y( :ls, :ha, :dt ),
X(
:v1,
:v2,
:v3,
:v4,
:v5,
:v6,
:v7,
:v8,
:v9,
:v10,
:v11,
:v12,
:v13,
:v14,
:v15,
:v16,
:v17,
:v18,
:v19,
:v20,
:v21,
:v22,
:v23,
:v24,
:v25,
:v26,
:v27
),
Validation Method( Name( "Leave-One-Out" ), Initial Number of Factors( 15 ) ),
Fit(
Method( NIPALS ),
Number of Factors( 7 ),
Show Confidence Band( 1 ),
Distance Plots( 1 ),
Scatter Scores Plots( 1 ),
Diagnostics Plots( 1 ),
Overlay Loadings Plots( 1 ),
T Square Plot( 1 ),
Overlay Coefficients Plots( 1 )
)
);
// See what messages the PLS platform understands (look in the Log Window)
ClearLog();
ShowProperties(pls);
// Save some results from the (7 factor) fit
pls << (Fit[1] << savePredictionFormula);
pls << (Fit[1] << saveYresiduals);
Um zu verstehen, warum der Code funktioniert, würde ich mit „Hilfe > Bücher > Skripthandbuch“ beginnen, um die Grundlagen von JSL zu erlernen.
Betreff: JSL-Skript – Ergebnis der Vorhersageformel abrufenDanke Ian
Tut mir leid, meine Skriptkenntnisse sind zu begrenzt, Ihre Hilfe bringt mich nicht voran, können Sie mir bitte etwas mehr Unterstützung zukommen lassen?
Zuerst arbeite ich mit JMP, nicht mit PRO. Ich gehe davon aus, dass dies der Grund dafür ist, dass mein automatisiertes JMP-PLS-Skript anders aussieht als Ihres. Ich habe mein Skript angehängt.
Beim Lesen Ihres Skripts tauchen viele Fragen auf.
Warum trennen Sie zwischen PLSLAUNCH und PLSFITS? Ist das notwendig oder dient es nur Ihrer Bequemlichkeit beim Lesen/Dokumentieren?
Ist es notwendig, PLSFITS die Passungen zuzuweisen, wenn ich nur eine „Passung“ habe, z. nur 7 Faktoren ( plsFits << ( Fit [ 1 ] << savePredictionFormula );
plsFits << ( Fit [ 1 ] << saveYresiduals ); Ich gehe davon aus, dass das bedeutet: Speichern Sie den Rest von Fit[1] im Objekt PLSFITS (und dieser Name kann von mir gewählt werden, es ist nur PLSFITS zur besseren Identifizierung)
Wenn ich Ihr Skript ausführe, erhalte ich diese Fehlermeldung im Protokollfenster: plsFits << (Fit[/*###*/1] << savePredictionFormula); Liegt das an der PRO-Terminologie?
Vielen Dank
Peter
Betreff: JSL-Skript – Ergebnis der Vorhersageformel abrufenHallo Peter, das sollte dir den Einstieg erleichtern. Die „Wait()“-Befehle dienen kosmetischen Zwecken und können entfernt werden.
NamesDefaultToHere(1);
// Get some data
dt = Open( "$SAMPLE_DATA/Baltic.jmp" );
// Launch the PLS platform
plsLaunch = dt << Fit Model(
Y( :ls, :ha, :dt ),
Effects(
:v1,
:v2,
:v3,
:v4,
:v5,
:v6,
:v7,
:v8,
:v9,
:v10,
:v11,
:v12,
:v13,
:v14,
:v15,
:v16,
:v17,
:v18,
:v19,
:v20,
:v21,
:v22,
:v23,
:v24,
:v25,
:v26,
:v27
),
No Intercept( 1 ),
Center Polynomials( 0 ),
Personality( "Partial Least Squares" )
);
// Do a couple of fits
Wait(2);
plsFits = plsLaunch << Run(
Fit( Method( NIPALS ), Number of Factors( 7 ) ),
Fit( Method( NIPALS ), Number of Factors( 6 ) )
);
// Save the prediction formula for the first fit (7 factors)
Wait(2);
plsFits << (Fit[1] << savePredictionFormula);
// Save the prediction formula for the second fit (6 factors)
Wait(2);
plsFits << (Fit[2] << savePredictionFormula);
// Now save the Y residuals
Wait(2);
plsFits << (Fit[1] << saveYresiduals);
plsFits << (Fit[2] << saveYresiduals);
Betreff: JSL-Skript – Ergebnis der Vorhersageformel abrufenHallo Ian,
Ich suche in der Community nach dem Speichern der „Save Y Predicted Values“ aus dem PLS in einer JSL. Gibt es ein Dokument, das besagt, in welchem Tool ich welche Spaltenspeicherung anspreche (z. B. Vorhersageformeln, Konfidenzintervalle, vorhergesagte Werte)?
Danke Peter
Betreff: JSL-Skript – Ergebnis der Vorhersageformel abrufenTut mir leid, nein, vielleicht habe ich das Problem verwechselt. Das „Wait()“ diente nur kosmetischen Zwecken. Im Allgemeinen sollten Sie dies in JSL nie benötigen (es gibt jedoch einige, sehr seltene Situationen, in denen dies der Fall sein könnte). Wahrscheinlich ist es am besten, der Datentabelle eine Nachricht „Formeln ausführen“ zu senden.
Betreff: JSL-Skript – Ergebnis der Vorhersageformel abrufenAh perfekt! Ich muss nur Wait() eingeben. Danke schön!
Betreff: JSL-Skript – Ergebnis der Vorhersageformel abrufenDetails hängen von der Plattform ab, die Sie verwenden, aber dies zeigt die Grundidee:
NamesDefaultToHere(1);
// Get some data
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(X(:height), Y(:weight));
// Do a regression
biv << fitLine;
/// Save the prediction formula column
biv << (curve[1] << savePredicteds);
// Add a new observation (row) that we want to predict for
Wait(2);
dt << addRows(1);
// Give predictor values and get the prediction back
Column(dt, "weight")[NRow(dt)] = 160;
Column(dt, "height")[NRow(dt)] = 65;