從列中隨機抽取子樣本大家好,- 我在全國有 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 語法參考。