我试图在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(:)'显示为bootstrap样本选择的数据/值的索引,但不显示新的样本值!我从原始数据创建假数据并不是很有趣,我甚至无法看到幕后创建的内容?!?
我的第二个问题:是否可以在不使用任何功能的情况下重新整个矩阵(在本例中为D)?但是,我知道如何使用'unidrnd'从矢量数据创建随机值。
提前感谢您的帮助。
答案 0 :(得分:2)
问题1的答案是bootsam
提供重采样数据的索引。具体而言,nth
的{{1}}列提供了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
和reshape
后,您可以将其转换为permute
数组,其中沿第三维索引T*4*M
会生成m = 1, ..., M
重采样数据集。示例代码如下:
mth