用於分析(逐步迴歸)平台的蒙特卡羅模擬我有一個分析,其中使用了幾個包含隨機元素的列。我知道如何手動更新列中的隨機數,並且我了解如何對分析的輸出進行模擬。但在這種情況下,我想每次更新列中的隨機數字時運行逐步迴歸。我想這樣做至少1000次。我不知道如何自動化此過程:在公式列中產生新的隨機數,重新運行逐步迴歸平台,運行所選模型並收集結果。
進階統計建模回覆:分析(逐步迴歸)平台的蒙特卡羅模擬(貌似還有一個相關主題直到發布此內容我才發現)。
無論如何,請找到一種可能(或可能不會…)更快的替代方法(使用上面的資料表):
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'");
回覆:分析(逐步迴歸)平台的蒙特卡羅模擬我找到了丟失的指令,但無法讓它工作。dt << 重新運行公式;
將在我的公式中產生一組新的隨機數。然而,當我將它插入腳本中時 - 在 For 循環內但在擬合模型之前,它似乎並沒有改變隨機數。我修改後的腳本是:
清除全域變數();
清除日誌();
名稱預設為此處( 1 );
//定義進出路徑
Path_in = 選擇檔案( "選擇檔案" );
If( 目錄存在( "$Desktop\Fit_Stepwise" ),
,
建立目錄(“$Desktop\Fit_Stepwise”)
);
Path_out = "$Desktop\Fit_Stepwise\";
//開啟資料表後運行Fit模型並逐步運行
dt = 開啟( Path_in );
對於( 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 << 保存( Path_out || Char( i ) || ".csv", "csv" );
ow << 關閉視窗;
dt_result << 關閉視窗;
);
dt << 關閉視窗;
dt_result = 多個檔案導入(
<<設定資料夾( Path_out ),
<<設定名稱過濾器("*.*;"),
<<設定名稱啟用(0),
<<設定大小過濾器( {589, 589} ),
<<設定大小啟用(0),
<<設定日期過濾器( {3727681987.773, 3727682566.676} ),
<<設定新增檔案名列(1),
<<設定導入模式(“CSVData”),
<<設定字元集(“最佳猜測”),
<<設定堆疊模式(「堆疊相似」),
<<設定 CSV 有標題( 1 ),
<<設定 CSV 允許數字( 1 ),
<<設定 CSV 第一標題行( 1 ),
<<設定 CSV 標題行數( 1 ),
<<設定 CSV 第一資料行( 2 ),
<<設定 CSV EOF 逗號( 1 ),
<<設定 CSV EOF 選項卡( 0 ),
<<設定 CSV EOF 空間( 0 ),
<<設定 CSV EOF 空格( 0 ),
<<設定 CSV EOF 其他( "" ),
<<設定 CSV EOL CRLF(1),
<<設定 CSV EOL CR(1),
<<設定 CSV EOL LF( 1 ),
<<設定 CSV EOL 分號( 0 ),
<<設定 CSV EOL 其他( "" ),
<<設定 CSV 報價( "\!"" ),
<<設定 CSV 轉義(""),
<<設定導入回呼( Empty() )
) << 導入資料;
dt_result << 行選擇( 選擇其中( :Name( "\!"Prob>F\!"" ) > 0.05 ) ) << 刪除行;
dt_result << 分佈( 堆疊( 1 ), 名目分佈( 列( :參數 ), 水平佈局( 1 ), 垂直( 0 ) ) );
有人可以幫助我放置“重新運行公式”命令或告訴我為什麼它不起作用嗎?
回覆:分析(逐步迴歸)平台的蒙特卡羅模擬坦白
謝謝,這幾乎是完美的。但是,我的列中有隨機函數,我希望它們在每次運行循環時更新(選擇新的隨機抽取)。您編寫的腳本似乎每次運行都使用相同的隨機數。有沒有辦法讓公式每次都更新?
回覆:分析(逐步迴歸)平台的蒙特卡羅模擬嗨,戴爾雷曼
我的想法是從“逐步”平台獲取結果並將其保存在資料夾中。 然後 '多個文件導入' 整個結果作為一個文件。
最後,按 ' 排乾淨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>
回覆:分析(逐步迴歸)平台的蒙特卡羅模擬您在上一篇文章中提出的計劃是一個很好的計劃。 我也會這麼做。 我會嘗試給一些建議。
- 如果您不熟悉 JMP 腳本編寫,可以從以下起點開始:腳本指南。 在這個特定任務中,一些重要的部分可能是:
- 除此之外,您還需要熟悉「幫助」選單下的「腳本索引」。 有 3 組腳本物件:函數、物件和顯示框。 左上角有一個組合框,您可以縮小範圍到特定群組。
- 對於此特定任務,您可能需要查看物件群組。 這裡列出了所有平台,包括數據表。 您可能想查看“Fit Model”物件下的“Fit Stepwise”項目。點擊“Fit Stepwise”,然後在右側的“Item Messages”中尋找“Finish”訊息。 這可能是你現在缺少的關鍵部分。
- 對於這個特定任務,您還需要學習如何操作資料表。 也許尤其是串聯。 轉到物件列表,按一下“資料表”,然後在右側尋找項目訊息中的“連接”。
除了上述內容之外,以下是我從同事那裡學到的其他有用提示。
- 盡可能向討論區發布較小的、具體的問題。 它將更有可能產生幫助。
- 優先選擇螢幕截圖而不是附件。 對於JSL程式碼,可以直接在貼文中插入,方便讀者查看。 編輯貼文時,請在工具列中尋找 按鈕。 它也更有可能產生幫助。 例如,行動裝置上的閱讀器不太可能開啟附件。

回覆:分析(逐步迴歸)平台的蒙特卡羅模擬我已經基本解決了我的問題 - 但仍然有一個問題。附件是一個小腳本,可以根據我的需要執行逐步迴歸。但要產生 1000 個樣本,我需要建立一個「樣本」列並將其用作分析中的「依據」變數。這可行,但進行模擬的方法很麻煩,因為我需要讓檔案很長 - 例如,對於每個 1000 個觀測值的 1000 個樣本,我需要 1,000,000 行。有誰知道進行模擬的更有效的方法?據我所知,許多JMP平台附帶的「模擬」選項只能模擬某些分析結果,而不能模擬分析本身。
回覆:分析(逐步迴歸)平台的蒙特卡羅模擬讓我更具體一些,以防任何慷慨的腳本編寫者可以提供幫助。我附上了我正在嘗試做的事情的較小版本。我在附件中有 10 列(全部從第 2 列開始),涉及隨機正態分佈,第一列 Y 使用標記為參數 1 到 5 的 5 列,以及公式中的一個隨機正態分佈。我希望執行以下步驟:
1. 運行檔案中儲存的逐步迴歸。我不需要製作或運行模型,我只需要執行“Go”按鈕,該按鈕在“擬合模型”平台的“運行”之後運行逐步過程。
2. 記錄從第 2 列開始的 10 列中的每一列被逐步過程選擇的頻率。 (我不知道如何編寫腳本收集特定資訊)
3. 重新執行 5 個參數列的公式,以便它們包含一組新的模擬值。我知道這可以透過表格左上角紅色箭頭處的重新運行公式命令來完成(但我不知道如何編寫腳本)。
4. 重複步驟 1 和 2。 (我相信這可以透過一個簡單的循環來完成)
5. 執行此操作 1000 次,並顯示在逐步過程中選擇 10 個第 2 列中的每一個的次數的分佈。
我相信這一切都可以編寫腳本,但這遠遠超出了我的能力範圍。如果有人可以提供協助,我將不勝感激。我願意與某人共同撰寫一篇論文,因為我對此有一個出路。