从列中随机抽取子样本大家好,- 我在全国有 200 家商店。我很想知道是否可以对这些商店的一小部分进行二次抽样并估算事件的分布。 可能有一些蒙特卡罗方法可以用原始 200 行中的随机子样本填充新列中的 30 行。
然后我可以将子样本中 30 个计数的分布与 200 个总体中的分布进行比较。
重复此操作 100 次,以确定代表 200 人的 30 家商店抽样的风险。
想法?谢谢,保罗
200 行中的前 10 行
商店# - 第 1 列
偶数 - 第 2 列
19 20 21 22 23 25 26 27 29 34 | 1 4 7 3 4 3 12 5 8 8 |
质量和工艺工程回复:从列中随机抽取子样本
谢谢,罗恩
回复:从列中随机抽取子样本你好@保罗,
在此类应用程序中有用的另一个非脚本解决方案是使用“表”菜单下的 JMP 查询生成器。

在那里你可以找到一个随机抽样选项卡,如图所示

像往常一样,您以交互方式运行它,您可以利用为其他用途而创建的脚本。
回复:从列中随机抽取子样本谢谢你,Sam,以及所有发布解决方案的人。
回复:从列中随机抽取子样本我知道您没有编写解决方案的脚本。 您还可以交互地使用“表”>“子集”来创建一个新的较小表,其中包含从原始数据表中随机选择的行。 这种方式对你有用吗?
回复:从列中随机抽取子样本这是一个示例脚本,它创建给定大小的子集而不进行替换
Names Default To Here( 1 );
dt =
// Open Data Table: semiconductor capability.jmp
// → Data Table( "semiconductor capability" )
Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
// New formula column: Row
Data Table( "semiconductor capability" ) << New Column( "Row",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Row() )
) << Move Selected Columns( {:Row}, after( :SITE ) );
// Loop through data creating sample data tables
sampleSize = 20;
For( i = 1, i <= 20, i++,
dtSample = Data Table( "semiconductor capability" ) << Subset(
Sample Size( sampleSize ),
Selected columns only( 0 ),
output table( "Sample " || Char( i ) )
);
matSelected = dtSample:Row << get values;
// Delete row column from sample data
dtSample << delete columns( Row );
// Delete selected rows from main table
dt << select rows( matSelected );
dt << delete rows;
);
// Delete row column from original data table
dt << delete columns( Row );回复:从列中随机抽取子样本使用列公式进行子样本的快速方法是使用 Col Shuffle() 函数。该函数返回行号的随机重新排序。如果您选择 Col Shuffle() 值小于或等于子样本大小 (n_sub) 的行,则这相当于对列进行随机排序并选择前 n_sub 行。
例如,使用此公式添加新列将为子样本大小 30 执行此操作。

附表示例。
如果您想重复执行此操作,那么学习一些 JMP 脚本将使这变得更容易。重复添加这样的列的基本脚本是
Names Default to Here( 1 );
Number_of_Cols_to_Add = 100;
For( i = 1, i <= Number_of_Cols_to_Add, i++,
Current Data Table() <<
New Column( "Y Subsample (Size 30)",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( Col Shuffle() <= 30, :Y, . ) )
)
);
回复:从列中随机抽取子样本你好杰夫,谢谢你的回复。不幸的是,我不明白如何使用该功能来达到我的目的。
- 重新采样频率创建重新采样的计数。这似乎是使用二次采样数据创建新表的中间步骤。 我希望直接从 200 行的原始总体中创建一列子采样数据。
- 我更愿意在不替换的情况下进行采样,而不是引导程序。
如果我只需要对原始数据进行一次子采样,最简单的路径是表>子集>随机样本大小= 30(例如)
我不编写脚本,否则我会创建一个循环来生成 100 个包含 30 个随机样本的表,然后将这 100 个表连接到一个主表中。
有没有办法直接从列中抓取 30 个随机样本,并将这 30 个值放入新列中?
最终,我希望尝试“可靠性”>“寿命分布”>“比较组”来评估子样本的分布与原始总体分布。
- 然后重复样本大小 = 20,然后 40,等等。这样我就可以评估为 200 家商店的总体提供类似分布的最小样本大小。
谢谢,保罗
回复:从列中随机抽取子样本看看重新采样频率()功能。
重采样频率
生成具有替换频率计数的随机选择,适合在引导中使用。 例如,它支持第二个频率列参数,使其能够执行与第二个参数中指定的预先存在的频率列相关的引导样本。 重新采样频率()生成 100% 重采样。 重采样频率(速率)生成一个速度频率样本。 重新采样(速率,列)生成一个样本,该样本是通过比率乘以指定列的总和计算得出的。 有关 Resample Freq 函数语法的详细信息,请参阅离散概率函数在里面JSL 语法参考。