在第一列中,我模擬一個隨機變數來建立一個總體(例如,具有常態分佈的 10000 條線)。
然後,我想在另一列中獲取一個大小為 n 的隨機樣本,該樣本是固定的,並從上一列創建的總體中提取的。最好的方法是同時在並列的列中取得多個樣本。
僅供參考,我只發現 JMP 幾個星期(我已經使用 Minitab 多年了),除了在創建圖表時進行抽樣外,我還沒有找到自己的解決方案。
先感謝您。
有多種方法可以做到這一點。
最簡單的方法是使用 Subset 平台的內建功能
表=>子集
給定一個包含 1000 行資料的表

表格=>子集可讓您建立給定百分比或給定樣本大小的隨機樣本

這將為你提供一個包含 100 行的新表

然後就可以簡單地使用以下方法將該表與原始表連接起來
表=>連接

這將滿足您的要求

這種方法的主要問題是它在某種程度上違反了 JMP 資料表的假設。
另一種方法是使用列公式。我想到公式會產生一個隨機樣本,但它不會將選定的資料放入前 100 行,而是將值放在選定資料所在的行中。
公式如下
As Constant(
rowCount = N Rows( Current Data Table() );
sampleMatrix = [];
For( i = 1, i <= 100, i++,
found = 0;
While( found == 0,
row = Random Integer( 1, rowCount );
If( N Rows( Loc( sampleMatrix, row ) ) == 0,
found = 1;
sampleMatrix = sampleMatrix || Matrix( row );
);
);
);
);
If( N Cols( Loc( sampleMatrix, Row() ) ) != 0,
:Column 1,
.
);
產生

現在,如果將樣本生成移至 JSL,創建所需數量的樣本將變得相當容易
Names Default To Here( 1 );
dt = Current Data Table();
rowCount = N Rows( dt );
// Create 5 Random Samples of 100
For( k = 1, k <= 5, k++,
dt << New Column( "Random" || Char( k ) );
sampleMatrix = [];
For( i = 1, i <= 100, i++,
found = 0;
While( found == 0,
row = Random Integer( 1, rowCount );
If( N Rows( Loc( sampleMatrix, row ) ) == 0,
found = 1;
sampleMatrix = sampleMatrix || Matrix( row );
);
);
);
// Write the values to the new column
For Each( {row}, sampleMatrix,
Column( "Random" || Char( k ) )[row] = :Column 1[row]
);
);
這創造了

稍加修改,隨機樣本產生就可以採用無放回抽樣
Names Default To Here( 1 );
dt = Current Data Table();
rowCount = N Rows( dt );
masterSampleMatrix = [];
// Create 5 Random Samples of 100
For( k = 1, k <= 5, k++,
dt << New Column( "Random" || Char( k ) );
sampleMatrix = [];
For( i = 1, i <= 100, i++,
found = 0;
While( found == 0,
row = Random Integer( 1, rowCount );
If( N Rows( Loc( masterSampleMatrix, row ) ) == 0,
found = 1;
sampleMatrix = sampleMatrix || Matrix( row );
masterSampleMatrix = masterSampleMatrix || Matrix( row );
);
);
);
// Write the values to the new column
For Each( {row}, sampleMatrix,
Column( "Random" || Char( k ) )[row] = :Column 1[row]
);
);
