Ich habe mir das schnell angesehen, beachten Sie, dass ich JMP16 und For Each() anstelle von For() verwende.
Frage 1:
Ich denke, Sie müssen separate Verweise auf die Gliederungsfelder erhalten. Eine Option besteht darin, XPath zu verwenden und dann die Liste der Listen zu durchlaufen. Ebenfalls
//creates a report and maximizes desirability
//doesn't work if there is anything in the by() field
pf_obs = fit << XPath("//OutlineBox[text()='Prediction Profiler']"); // list of lists so easiest to loop over them
For Each({pf_ob}, pf_obs,
pf = pf_ob << Get Scriptable Object;
pf << Maximize and Remember;
);
//create a data table with the parameters from the prediction profile
//in my other version (with the for loop a Where( :x = y[i]) in the model, I than had some code to concatenate tables together and change some formatting
dtout[1] = Report(fit[1])["Prediction Profiler"]["Remembered Settings"][Table Box(1)] << Make Combined Data Table

Frage 2:
Ich würde diesen Teil des Codes etwas größer umgestalten, um ihn sauberer zu machen, aber Sie können dafür auch eine "Schnellkorrektur" durchführen. Verwenden Sie Einfügen in, um dem Profiler-Ausdruck Antwortgrenzen hinzuzufügen
jslExprProfiler = expr(
Profiler( 1,
Confidence Intervals( 1 ),
Desirability Functions( 1 ),
//sets desirability target of the crit response
_Y2_ << Response Limits(
{Lower( ytarg-1, 0.0183 ), Middle( ytarg, 1 ), Upper( ytarg+1, 0.0183 ),
Goal( "Match Target" ), Importance( 1 )}
)
);
);
For Each({mod}, ModList,
Insert Into(
jslExprProfiler, EvalExpr(
Expr(mod) << Response Limits({Lower(1, 1), Middle(2, 1), Upper(3, 1), Goal("None"), Importance(1)})
)
)
);
jslExprProfiler = Substitute(
Expr(fit << _prof_),
Expr(_prof_), Name Expr(jslExprProfiler)
);
jslExprProfiler = Substitute(
Name Expr(jslExprProfiler),
expr(_Y2_), nameexpr(yList[1])
);
Vollständiger Code:
Mehr sehen... Hallo,
Ich arbeite an einem Skript, das Benutzern dies ermöglicht
- Wählen Sie Spalten aus, die in ein Modell passen
- Identifizieren Sie die Primärvariable und geben Sie den Zielwert an
- Identifizieren Sie, nach welcher Spalte das Modell aufgeteilt werden soll
- Erlauben Sie JMP, das Modell zu erstellen, die Erwünschtheit zu optimieren, um das beabsichtigte Ziel zu erreichen, und geben Sie dann die Modellergebnisse aus
- Kopieren Sie die Ergebnisse aus einer praktischen Ausgabetabelle
Ich habe funktionale Skripte, die das tun, was ich will, ohne Benutzereingaben oder -auswahlen zuzulassen, aber es war eine Herausforderung, das Skript interaktiv zu gestalten. Ich denke, ich bin größtenteils dort, aber es gibt ein paar spezifische Dinge, mit denen ich zu kämpfen habe
- Frage 1: In einer früheren Version dieses Skripts habe ich für jedes Modell ein anderes Fenster verwendet, indem ich eine for-Schleife mit einer While( x == "y[i]")-Zeile verwendet habe. Ich würde lieber By( :x ) verwenden, weil es flexibler ist und ein Ausgabefenster bietet. Allerdings unterbricht die Verwendung von By( :x ) das spätere Skript, um ein skriptfähiges Objekt aus dem Bericht abzurufen. Ist es möglich, für jedes Unterfeld im Modellfenster einen anderen Bericht zu erstellen? Oder eine bessere Möglichkeit, die Zeilen 173-181 zu codieren? Ich baue diese Zeilen basierend auf diesen beiden anderen Threads auf: Thread 1 , Thread 2 .
- Frage 2: Ich benötige die Option, eine variable Anzahl von modellierten Effekten ohne Erwünschtheitsfunktionen zu haben (später wird das vollständige Skript auch minimierte Effekte haben, aber dieses vereinfachte Demo-Skript wurde zu kompliziert. In den Zeilen 122-126 konnte ich den gewünschten Ausdruck in ModExpr erstellen, aber da es sich um eine Liste handelte, funktionierte es nicht, als ich versuchte, ihn direkt in das Profil einzufügen. Meine Problemumgehung besteht darin, eine größere Anzahl von Platzhaltern zu haben, als die Anzahl der zu modellierenden Variablen übersteigt, und der Code scheint die unsinnigen Teile einfach zu ignorieren, wenn ich weniger als 6 modellierte Effekte habe ... aber das scheint sehr umständlich zu sein. Gibt es eine Möglichkeit, den kommentierten Code in den Zeilen 130–134 so zu korrigieren, dass die Liste zu einem einzigen Ausdruck zusammengefasst wird, der funktioniert? Ich konnte Concatenation auch nicht gut spielen lassen, aber ich wette, da ist etwas Einfaches, das ich übersehen habe.
Hier ist ein Beispielskript mit Beispieldaten. Das Modell passt schrecklich, aber das ist für die Demo nicht wirklich wichtig. Wenn Sie beim Ausführen die Auswahl für „nach“ deaktivieren, läuft alles einwandfrei und es werden Ergebnisse ausgegeben. Wenn im Abschnitt „by“ noch etwas übrig bleibt, wird Zeile 174 unterbrochen.
Vielen Dank für jede Hilfe!
Names Default To Here( 1 );
//sample data for demo
dt = Open( "$SAMPLE_DATA/Football.jmp" );
xvar = {};
yvar = {};
byvar = {};
ytarg = 60;
dtout = {};
//let users select the columns to model
win = New Window( "Model Variable Selection",
<<MODAL></MODAL>