分析 (段階的回帰) プラットフォーム用のモンテカルロ シミュレーションランダムな要素を含む複数の列を使用する分析があります。列内の乱数を手動で更新する方法と、分析の出力のシミュレーションを実行する方法を理解しています。ただし、この場合は、列内の乱数が更新されるたびに段階的回帰を実行したいと考えています。最低でも1000回はやりたいです。このプロセスを自動化する方法がわかりません。数式列で新しい乱数を生成し、段階的回帰プラットフォームを再実行して選択したモデルを実行し、結果を収集します。
高度な統計モデリングRe: 分析 (段階的回帰) プラットフォームのモンテカルロ シミュレーション(他にもあるようですが、関連スレッドこれを投稿するまで気づきませんでした)。
とにかく、より迅速な (またはそうでないかもしれない . . . ) 代替アプローチ (上記のデータ テーブルを使用) を見つけてください。
NamesDefaultToHere(1);
dt = DataTable("Test Data.jmp");
n = 100; // Number of simulations
resMat = []; // Results matrix
for(i=1, i<=n, i++,
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,
Invisible
);
fmRep = Report(fm);
fmRep[ButtonBox(7)] << click; // Press the 'Go' button
Wait(0); // Needed to let Stepwise do it's thing before proceeding
selectedItems = fmRep[CheckBoxBox(2)] << Get Selected Indices As Matrix; // Retrive which parameters were selected this time
fmRep << closeWindow;
resmat = VConcat(resmat, Transpose(selectedItems)); // Append current results row-wise to those we have already
dt << reRunFormulas; // Get a new random sample
);
dt2 = AsTable(resmat); // Make a results table
dt2 << setName("Parameters selected by 'Stepwise'");
Re: 分析 (段階的回帰) プラットフォームのモンテカルロ シミュレーション不足している命令を見つけましたが、動作させることができません。dt << 式を再実行します。
数式で新しい乱数のセットを生成します。ただし、これをスクリプトに挿入すると、For ループ内でモデルに適合する前に、乱数が変更されているようには見えません。私の変更したスクリプトは次のとおりです。
Globals() をクリアします。
ログをクリア();
名前のデフォルトは Here( 1 );
// パスの出入りを定義する
Path_in = Pick File( "ファイルを選択" );
If( ディレクトリが存在する( "$Desktop\Fit_Stepwise" )、
、
ディレクトリの作成( "$Desktop\Fit_Stepwise" )
);
Path_out = "$Desktop\Fit_Stepwise\";
//データテーブルを開いた後、フィットモデルを段階的に実行します
dt = Open( Path_in );
For( i = 1、i <= 1000、i++、
dt << 式を再実行します。
ow = dt << モデルの適合(
Y( :Y )、
エフェクト(
:列 2 001、
:列 2 002、
:列 2 003、
:列 2 004、
:列 2 005、
:列 2 006、
:列 2 007、
:列 2 008、
:列 2 009、
:コラム2 010
)、
性格(「段階的」)、
走る、
SendToReport( Dispatch( {}, "ステップ履歴", OutlineBox, {Close( 1 )} ) )
);
dt_result = Report( ow )[アウトライン ボックス( "Y に段階的に適合" )][アウトライン ボックス( "現在の推定" )][テーブル ボックス( 1 )] << データ テーブルに作成;
dt_result << save( Path_out || Char( i ) || ".csv", "csv" );
ow << ウィンドウを閉じる;
dt_result << ウィンドウを閉じる;
);
dt << ウィンドウを閉じる;
dt_result = 複数ファイルのインポート(
<<フォルダーを設定( Path_out )、
<<名前フィルターの設定( "*.*;" ),
<<名前の設定を有効にする( 0 ),
<<サイズ フィルターの設定( {589, 589} )、
<<サイズを有効に設定( 0 )、
<<日付フィルターの設定( {3727681987.773, 3727682566.676} ),
<<ファイル名追加列を設定( 1 )、
<<インポート モードの設定( "CSVData" ),
< <<スタックモードを設定(「類似スタック」)、
< < < < < < < < < < < < < < < < < <<インポート コールバックを設定( Empty() )
) << データをインポート;
dt_result << 行選択( Select where( :Name( "\!"Prob>F\!"" ) > 0.05 ) ) << 行を削除します。
dt_result << Distribution( Stack( 1 ), Nominal Distribution( Column( :Parameter ), 水平レイアウト( 1 ), 垂直( 0 ) ) );
誰かが「数式を再実行」コマンドの配置を手伝ってくれたり、それが機能しない理由を教えてくれたりしませんか?
Re: 分析 (段階的回帰) プラットフォームのモンテカルロ シミュレーションフランク
ありがとう、これでほぼ完璧ですね。ただし、列にランダム関数があり、ループが実行されるたびに更新 (新しいランダム描画を選択) したいと考えています。あなたが書いたスクリプトは、実行ごとに同じ乱数を使用しているようです。毎回数式を更新する方法はありますか?
Re: 分析 (段階的回帰) プラットフォームのモンテカルロ シミュレーションこんにちは、dale_lehman
私のアイデアは、「段階的」プラットフォームから結果を取得してフォルダーに保存することです。 それから '複数ファイルのインポート' 結果全体を 1 つのファイルとして保存します。
最後に、' によって行をクリーンアップします。 P値」そしてあなたの望むように配布してください。JSL の詳細を以下に示します。
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++,
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: 分析 (段階的回帰) プラットフォームのモンテカルロ シミュレーション前回の投稿で示したものは良い計画です。 私もそうします。 いくつかの推奨事項を紹介してみます。
- JMP でのスクリプト作成が初めての場合、開始点は次のとおりです。スクリプトガイド。 この特定のタスクにおける重要な部分は次のとおりです。
- それに加えて、[ヘルプ] メニューの [スクリプト インデックス] についてよく理解しておく必要があります。 スクリプト オブジェクトには、関数、オブジェクト、表示ボックスの 3 つのグループがあります。 左上にコンボボックスがあり、特定のグループに絞り込むことができます。
- この特定のタスクについては、「オブジェクト」グループをチェックアウトする必要がある場合があります。 データテーブルを含むすべてのプラットフォームがここにリストされます。 「Fit Model」オブジェクトの下にある「Fit Stepwise」項目をチェックしてみてください。「Fit Stepwise」をクリックし、右側の「Item Messages」の中に「Finish」メッセージがあるかどうかを確認してください。 それが今のあなたに欠けている重要な部分かもしれません。
- この特定のタスクでは、データ テーブルの操作方法も学習する必要があります。 特に連結はそうかも知れません。 [オブジェクト] リストに移動し、[データ テーブル] をクリックし、右側のアイテム メッセージの中で [連結] を探します。
上記以外に、私が同僚から学んだその他の役立つヒントを紹介します。
- 可能な限り、より小規模で具体的な質問をディスカッション掲示板に投稿してください。 助けが生まれる可能性が高くなります。
- 添付ファイルよりもスクリーンショットを優先します。 JSL コードの場合は、投稿に直接挿入できるので、読者が見ることができます。 投稿を編集するときは、ツールバーの ボタンを探してください。 助けが生まれる可能性も高くなります。 たとえば、モバイル デバイスのリーダーが添付ファイルを開く可能性はほとんどありません。

Re: 分析 (段階的回帰) プラットフォームのモンテカルロ シミュレーション問題はほとんど解決しましたが、まだ質問があります。必要に応じて段階的回帰を実行する小さなスクリプトが添付されています。ただし、1,000 個のサンプルを生成するには、「サンプル」列を作成し、それを分析の「By」変数として使用する必要がありました。これは機能しますが、ファイルを非常に長くする必要があるため、シミュレーションを行うには面倒な方法です。たとえば、それぞれ 1000 個の観測値の 1000 個のサンプルの場合、1,000,000 行が必要です。シミュレーションを実行するより効率的な方法を知っている人はいますか?私の知る限り、多くの JMP プラットフォームに付属する「シミュレート」オプションは特定の分析結果のみをシミュレートできますが、分析自体はシミュレートできません。
Re: 分析 (段階的回帰) プラットフォームのモンテカルロ シミュレーション親切なスクリプト作成者が助けてくれるかもしれないので、もっと具体的に説明しましょう。私がやろうとしていることの小さいバージョンを添付しました。添付ファイルには、ランダムな正規分布を含む 10 列 (すべて列 2 から始まります) があり、最初の列 Y では、パラメータ 1 ~ 5 のラベルが付いた 5 つの列と、数式内の 1 つのランダムな正規分布が使用されます。次の手順を実行したいと考えています。
1. ファイルに保存されている段階的回帰を実行します。モデルを作成したり実行したりする必要はありません。必要なのは、Fit Model プラットフォームから Run の後に段階的な手順を実行する Go ボタンを実行することだけです。
2. 列 2 で始まる 10 列のそれぞれが段階的な手順で選択される頻度を記録します。 (その特定の情報を収集するスクリプトの作成方法がわかりません)
3. 5 つのパラメータ列の式を再実行して、新しいシミュレートされた値のセットが含まれるようにします。これは、表の左上にある赤い矢印にある [数式を再実行] コマンドで実行できることはわかっています (ただし、そのスクリプトの作成方法がわかりません)。
4. ステップ 1 と 2 を繰り返します。 (これは単純なループで実行できると思います)
5. これを 1000 回実行し、段階的な手順で 10 列 2 の各列が選択された回数の分布を表示します。
これらすべてをスクリプト化できると信じていますが、それは私にできることをはるかに超えています。どなたかお役に立てれば幸いです。これについては出口があるので、誰かと論文を共著したいと思っています。