式を再実行するためのスクリプトの質問以前の投稿でこの質問をしましたが、数週間前のことなので気づかれないかもしれません。これはこのグループにとっては簡単なスクリプトの問題だと思います。以下は、段階的回帰のモンテカルロ シミュレーションを正常に実行するスクリプト (frank によって寄贈) です。唯一行われなかったのは、ステップワイズ回帰を実行する前に、数式に乱数が含まれている列の数を再計算することでした。<<式の再実行コマンドは、テーブル内の赤い矢印をクリックして「式の再実行」と手動でクリックすると機能しますが、スクリプトでは何も実行されません。For ループの各反復の前に数式を再実行するのを手伝ってくれる人はいますか?
私の失敗した試みは、スクリプトの 19 行目です。ありがとう。
Clear Globals();
Clear Log();
Names Default To Here( 1 );
//Define path in and out
Path_in = Pick File( "Select file" );
If( Directory Exists( "$Desktop\Fit_Stepwise" ),
,
Create Directory( "$Desktop\Fit_Stepwise" )
);
Path_out = "$Desktop\Fit_Stepwise\";
//Run Fit model and stepwise after open datatable
dt = Open( Path_in );
For( i = 1, i <= 1000, i++,
dt << Rerun Formulas;
ow = dt << Fit Model(
Y( :Y ),
Effects(
:Column 2 001,
:Column 2 002,
:Column 2 003,
:Column 2 004,
:Column 2 005,
:Column 2 006,
:Column 2 007,
:Column 2 008,
:Column 2 009,
:Column 2 010
),
Personality( "Stepwise" ),
Run,
SendToReport( Dispatch( {}, "Step History", OutlineBox, {Close( 1 )} ) )
);
dt_result = Report( ow )[Outline Box( "Stepwise Fit for Y" )][Outline Box( "Current Estimates" )][Table Box( 1 )] << Make Into Data Table;
dt_result << save( Path_out || Char( i ) || ".csv", "csv" );
ow << close window;
dt_result << Close Window;
);
dt << Close Window;
dt_result = Multiple File Import(
<<SET folder="">F\!"" ) > 0.05 ) ) << Delete Rows;
dt_result << Distribution( Stack( 1 ), Nominal Distribution( Column( :Parameter ), Horizontal Layout( 1 ), Vertical( 0 ) ) );</SET>高度な統計モデリングRe: 再実行式のスクリプトに関する質問ありがとう、これで完璧です。そして辛抱強く付き合ってくれてありがとう。また、あなたが言うように、Wait() のヘルプはヘルプにはありますが、スクリプトインデックスにはありません。
Re: 再実行式のスクリプトに関する質問元のスクリプトが数式列の値を更新しない理由がわかりません。 ループ数を減らし (たとえば最大値として使用)、Wait(1) を追加することで、これをさらにテストできるかもしれません。たとえば、<<式を再実行した後、これによりデータテーブルの変更を確認できるようになります。
ここでは、前に提供したサブセット テーブルを使用して少し変更したスクリプトを示します。 スクリプト作成にこれ以上習熟する必要はないので、ここでの関数がどのように機能するかについては詳しく説明しませんが、以下の説明とスクリプト内のコメントを参照してください。必要に応じてさらに詳しく説明することもできます。 ここで提供されるスクリプトは次のことを行う必要があります。
- dt で見つかったすべての列をループし、それらの列の評価を有効にして、数式列の再計算を可能にします。
- モデルの適合を 100 回実行し、毎回 <
- また、Show() を使用して、ログに記録する 1 つの列の Col Median() を出力します。 これによりスクリプトの実行が遅くなりますが、列の値が変化することがわかります。
結果を含む 1 つの結果テーブルを作成し、不要なテーブルとウィンドウをすべて閉じます。
ループの実行が終了したら、ProbF > 0.05 の行を非表示にして除外し、ディストリビューションを作成します。
Names Default To Here(1);
dt = Current Data Table();
//dt = Open("Subset of Test data.jmp");
dt << Show Window(0); // should provide slight speed improvement
For Each({col_name}, dt << get column names(String), Column(dt, col_name) << suppress eval(False));
get_stepwise = Expr(
dt << Rerun Formulas;
Show(Col Mean(As Column(dt, :Column 2 001))); //will slow down script execution, but shows that values in Column 2 001 should change
Show(Col Mean(As Column(dt, :Column 2 010)));
fm = dt << Fit Model(
Y(:Y),
Effects(
:Column 2 001, :Column 2 002, :Column 2 003, :Column 2 004, :Column 2 005, :Column 2 006, :Column 2 007, :Column 2 008, :Column 2 009,
:Column 2 010
),
Personality("Stepwise"),
Run,
SendToReport(Dispatch({}, "Step History", OutlineBox, {Close(1)})),
Invisible // should provide slight speed improvement
);
dt_result = Report(fm)[Outline Box("Stepwise Fit for Y")][Outline Box("Current Estimates")][Table Box(1)] << Make Into Data Table(invisible);
dt_result << New Column("Loop", Numeric, Continuous, <<SET each="" value="">F\!""n > 0.05) << Hide And Exclude(1) << Clear Select;
// plot distribution
dt_collector << Distribution(Stack(1), Nominal Distribution(Column(:Parameter), Horizontal Layout(1), Vertical(0)));</SET>
このスクリプトは、少なくとも私の設定 (高速 PC、Windows 10、および JMP16.2) では Wait(0) の必要がないようです。 私にとっては、数式の値が再評価されたように思えます
結果:

Wait() のスクリプト インデックス。[トピック ヘルプ] をクリックすると詳細情報が表示される場合があります (Wait() の場合は表示されます)。

JMP ヘルプ - 待機(n) 「指定する待つ(0)メッセージ処理の 1 サイクルが可能になります。」
Re: 再実行式のスクリプトに関する質問私のテーブルの数式は抑制されていません。追加を提案されているコマンドについてもう少し詳しく説明してもらえますか?私はスクリプトについてはほとんどまったくの無知です (そして、より熟練するために時間を費やしたくありません。なぜそうすべきかを説明するのにエネルギーを費やさないでください。私は多くの点で特殊です)。{ } の中に 1 つの列名を入れるのか、それとも 6 つの列すべてを (, または ;? で区切って) 入れるのか?String を何かに置き換える必要がありますか?また、suppress eval (false) コマンドに対して列を個別にリストする必要がありますか?
wait() については、試してみましたが失敗しましたが、wait() コマンドのスクリプト インデックスにドキュメントが見つかりません。
Re: 再実行式のスクリプトに関する質問列が確実に評価されるように、For ループの前にこれを追加します (JMP16 より前のバージョンを使用している場合は、For Each を For に変更します)。
For Each({col_name}, dt << get column names(String),
Column(dt, col_name) << suppress eval(False)
);
私が開いた表では数式列の評価が抑制されていましたが、これはダウンロードされたファイルの安全機能かもしれません。
wait(0) を追加する必要がある場合は、最初から少しやりすぎて、for ループ内のすべての行の後にほぼ追加することができます。 通常、JMP では必要ありませんが、必要な場合もあります。
Re: 再実行式のスクリプトに関する質問ファイルを添付しました。Rerun Formulas を正しい場所に挿入したようですが、機能しません。Wait はどこへどのように行くのでしょうか?
Re: 再実行式のスクリプトに関する質問再実行式は機能するはずですが、どこかに wait(0) を追加する必要があるでしょうか? データテーブルを見ないと、問題がどこにあるのか (行数、列数、複雑な数式、何らかの理由で変更されないランダム シード) をテストするのは少し困難です。
この簡単な例では、値が適切に更新されているように見えます。
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(5),
New Column("Column1", Numeric, "Continuous", Format("Best", 12), Formula(Random Normal(1, 1))),
New Column("Column2", Numeric, "Continuous", Format("Best", 12), Formula(Random Normal(2, 1)))
);
For(i = 1, i <= 3, i++,
dt << Rerun Formulas;
Show(dt:Column1 << get as matrix);
Show(dt:Column2 << get as matrix);
fm = dt << Fit Model(
Y(:Column1),
Effects(:Column2),
Personality("Stepwise"),
Run,
SendToReport(Dispatch({}, "Step History", OutlineBox, {Close(1)}))
);
dt_result = Report(fm)[Outline Box("Stepwise Fit for Column1")][Outline Box("Current Estimates")][Table Box(1)] << Make Into Data Table;
fm << close window;
//dt_result << Close Window;
);