私はすぐにこれを見て、For() の代わりに JMP16 と For Each() を使用していることに注意してください。
質問1:
アウトライン ボックスへの個別の参照を取得する必要があると思います。1 つのオプションは、XPath を使用しすぎて、リストのリストをループすることです。 また
//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

質問2:
コードのこの部分をよりきれいにするために、もう少し大きなリファクタリングを行いますが、これに対して「クイックフィックス」を行うこともできます。 Insert Into を使用して、Response Limits を Profiler 式に追加します
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])
);
完全なコード:
もっと見る... こんにちは、
ユーザーが次のことをできるようにするスクリプトを開発中です。
- モデルに適合させる列を選択してください
- 主な変数を特定し、目標値を指定します
- モデルを分割する列を特定する
- JMP がモデルを作成し、意図したターゲットに到達するように望ましさを最適化し、モデルの結果を出力できるようにします。
- 便利な出力テーブルから結果をコピーする
ユーザーの入力や選択を許可せずに、必要なことを実行する機能的なスクリプトがありますが、スクリプトをインタラクティブにするのは困難でした。 ほとんどのことはできていると思いますが、具体的に苦労していることがいくつかあります
- 質問 1: このスクリプトの以前のバージョンでは、while( x == "y[i]") 行を含む for ループを使用してモデルごとに異なるウィンドウを使用していました。 By( :x ) の方が柔軟性が高く、出力ウィンドウが 1 つあるため、 By( :x ) を使用することをお勧めします。 ただし、 By( :x ) を使用すると、レポートからスクリプト可能オブジェクトを取得するための後のスクリプトが中断されます。 モデル ウィンドウのサブボックスごとに異なるレポートを作成することはできますか? それとも 173 ~ 181 行目をコード化するより良い方法でしょうか? これらの行は、他の 2 つのスレッドに基づいて構築します。スレッド1 、スレッド2 。
- 質問 2: 満足度関数を持たずにモデル化された可変数の効果を実現できるオプションが必要です (後で完全なスクリプトにも最小化された効果が含まれますが、この簡素化されたデモ スクリプトは複雑になりすぎていました)。 122 ~ 126 行目では、ModExpr で目的の式を作成できましたが、これはリストであるため、プロファイルに直接代入しようとすると機能しませんでした。 私の回避策は、モデル化すると予想される変数の数よりも多くのプレースホルダーを使用することです。モデル化された効果が 6 つ未満の場合、コードは無意味な部分を無視するようです...しかし、これは非常にジャンキーに思えます。 リストが機能する単一の式として結合されるように、130 ~ 134 行目のコメント化されたコードを修正する方法はありますか? Concatenation もうまく動作させることができませんでしたが、見逃していた単純な何かがあるに違いありません。
以下はサンプルデータを使用したサンプルスクリプトです。 モデルはひどく適合していますが、それはデモにとってはそれほど重要ではありません。 実行時に「by」の選択を解除すると、正常に実行され、結果が出力されます。 「by」セクションに何かが残っている場合は、174 行目が改行されます。
助けていただきありがとうございます!
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>