1

次のように、Matlab で「ブートストラップ」を使用してデータベースを (置き換えて) リサンプリングしようとしていました。

D = load('Data.txt');
lead = D(:,1);
depth = D(:,2);
X = D(:,3);
Y = D(:,4);

%Bootstraping to resample 100 times
[resampling100,bootsam] = bootstrp(100,'corr',lead,depth);

%plottig the bootstraping result as histogram
hist(resampling100,10);
... ... ...
... ... ...

上記のスクリプトは正しいですが、ブートストラップによって作成されたリサンプリングされた 100 個のデータセットをどのように表示/ロードできるのでしょうか? 'bootsam(:)' は、ブートストラップ サンプル用に選択されたデータ/値のインデックスを表示しますが、新しいサンプル値は表示しません!! 元のデータから偽のデータを作成していて、その裏で何が作成されているかさえ見えないのはおかしいではないですか!?

私の 2 番目の質問: 関数を使用せずに、マトリックス全体 (この場合は D) を完全にリサンプリングすることは可能ですか? ただし、「unidrnd」を使用してベクター データからランダムな値を作成する方法は知っています。

よろしくお願いします。

4

1 に答える 1

2

質問 1 に対する答えbootsamは、リサンプリングされたデータのインデックスを提供することです。具体的には、のnth列はbootsam、リサンプリングされたデータセットのインデックスを提供しますnth。あなたの場合、リサンプリングされたデータセットを取得するには、nth次を使用します。

lead_resample_n = lead(bootsam(:, n));
depth_resample_n = depth(bootsam(:, n));

2番目の質問については、リサンプリングされたデータに関数を適用することを心配せずに、リサンプリングされたデータセットを取得するにはどうすればよいのでしょうか。個人的には を使用randiしますが、この状況では を使用するか を使用するかは問題ではありませrandiunidrnd。いくつかのデータマトリックスの4列を想定した例が続きDます(質問のように):

%# Build an example dataset
T = 10;
D = randn(T, 4);

%# Obtain a set of random indices, ie indices of draws with replacement
Ind = randi(T, T, 1);

%# Obtain the resampled data
DResampled = D(Ind, :);

複数の再サンプリングされたデータを作成するには、ランダム インデックスの作成をループするだけです。または、ランダムなインデックスのマトリックスを作成し、それを index に使用することで、1 つのステップで実行できますD。と を注意深く使用するとreshapepermuteこれを配列に変換できます。3 番目の次元に沿ったT*4*Mインデックス付けにより、リサンプリングされたデータセットが生成されます。コード例は次のとおりです。m = 1, ..., Mmth

%# Build an example dataset
T = 10;
M = 3;
D = randn(T, 4);

%# Obtain a set of random indices, ie indices of draws with replacement
Ind = randi(T, T, M);

%# Obtain the resampled data
DResampled = permute(reshape(D(Ind, :)', 4, T, []), [2 1 3]);
于 2013-01-15T05:36:31.383 に答える