1

我试图在 Matlab 中使用“bootstrap”重新采样(替换)我的数据库,如下所示:

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(:)' 显示为引导样本选择的数据/值的索引,但不显示新的样本值!我从原始数据中创建假数据,我什至看不到幕后创建的内容,这不是很有趣吗?!?

我的第二个问题:是否可以在不使用任何函数的情况下完全重新采样整个矩阵(在本例中为 D)?但是,我知道如何使用“unidrnd”从矢量数据中创建随机值。

在此先感谢您的帮助。

4

1 回答 1

2

问题 1 的答案是bootsam提供重采样数据的索引。具体来说, 的nth列提供重采样数据集bootsam的索引。nth在您的情况下,要获取nth您将使用的重采样数据集:

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

关于第二个问题,我猜你的意思是,你将如何获得一个重新采样的数据集,而不用担心将函数应用于重新采样的数据。就个人而言,我会使用randi,但在这种情况下,您是否使用randi或无关紧要unidrnd。下面的示例假设某些数据矩阵的 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, :);

要创建多个重新采样的数据,您可以简单地循环创建随机索引。或者您可以通过创建一个随机索引矩阵并将其用于索引来一步完成D。通过仔细使用,reshapepermute可以将其转换为T*4*M数组,其中m = 1, ..., M沿第三维索引会产生mth重新采样的数据集。示例代码如下:

%# 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 回答