我试图使用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);
... ... ...
... ... ...尽管上面编写的脚本是正确的,但我想知道如何能够查看/加载通过bootstrap创建的重新采样的100个数据集?‘'bootsam(:)’显示为引导样本选择的数据/值的索引,但不显示新的样本值!!我从我的原始数据创建假数据,甚至看不到幕后是什么,这不是很有趣吗?!?
我的第二个问题:是否有可能在不使用任何函数的情况下完全重新采样整个矩阵(在本例中为D)?但是,我知道如何使用'unidrnd‘从矢量数据创建随机值。
提前感谢您的帮助。
发布于 2013-01-15 13:36:31
问题1的答案是bootsam提供了重采样数据的索引。具体地说,bootsam的nth列提供nth重采样数据集的索引。在您的示例中,要获得nth重新采样的数据集,您将使用:
lead_resample_n = lead(bootsam(:, n));
depth_resample_n = depth(bootsam(:, n));关于第二个问题,我猜你的意思是,如何在不担心对重新采样的数据应用函数的情况下获得重新采样的数据集。就我个人而言,我会使用randi,但在这种情况下,您使用randi还是unidrnd无关紧要。下面的示例假设某个数据矩阵D为4列(如您的问题所示):
%# 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,从而一步到位。通过谨慎使用reshape和permute,您可以将其转换为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]);https://stackoverflow.com/questions/14330936
复制相似问题