用于分析(逐步回归)平台的蒙特卡罗模拟我有一个分析,其中使用了几个包含随机元素的列。我知道如何手动更新列中的随机数,并且我了解如何对分析的输出进行模拟。但在这种情况下,我希望每次更新列中的随机数时都运行逐步回归。我想这样做至少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 列中的每一个的次数的分布。
我相信这一切都可以编写脚本,但这远远超出了我的能力范围。如果有人可以提供帮助,我将不胜感激。我愿意与某人共同撰写一篇论文,因为我对此有一个出路。