-1

Statistics ツールボックスを使用せずに、MATLAB でブートストラップ手法を使用しようとしています。

私のデータ セットは 2 x 50 の行列で、列 1 は月、列 2 は降水量です。値。このスクリプトを使用して、平均、標準偏差、歪度係数を計算しました。

yr = x(:,1);
p = x(:,2);
x_hat = mean(p);
sd = p-x_hat;
s = sqrt((1/(n-1)) .* (sum((sd).^2)));
skew = ((1/(n-1)) .* (sum((sd).^3))/(s.^3));

b) 必要なブートストラップ計算の数 (10000) をループし、そのループ k で、

c) 元のデータから N 個の値のサブセットをランダムに選択します (乱数発生器を使用して N を乗算し、丸めて整数にすることをお勧めします)。

N を取得したら、d) 各 k について必要な統計を計算 (および保存) します。

e) 格納されたベクトルを最低から最高の順に並べ替えます。

f) 次に、最低の 0.025 と最高の 0.025 をカットする値を見つけます。

どんなアドバイスでも素晴らしいでしょう。

4

1 に答える 1

0

これは、 からランダムなサンプルを[1, N]抽出することになります。ここで、N は各試行に必要なサンプル数です。次に、k 個の異なる順列を使用して、データ マトリックスの列に直接インデックスを付けます。例 (サンプル = 50、トライアル = 1000、サブセット = 40):

x = randn(2, 50); % example data matrix
N = 50; nTrials = 1000; nSamples = 40;   

繰り返しなしでサンプルを生成する、または置換なしでサンプリングするには、randperm whichを呼び出しますrand

for k = 1:nTrials
  indexSample(:,k) = randperm(N, nSamples);      
end    

置換付きのサンプリングが必要な場合(つまり、ブートストラップ用) への呼び出しを次のように置き換えますrandperm

indexSample(:,k) = round(N*rand(nSamples, 1))

それに応じて nSamples を増やします。

各試行 (k = 1 など) のデータ サンプル セットは、次のようになります。

xk = x(:, indexSample(:,k)) % sample data for trial k
于 2013-02-20T06:53:39.367 に答える