我试图在不使用统计工具箱的情况下在MATLAB中使用bootstrap技术。
我的数据集是一个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的值。
任何建议都会很棒。
答案 0 :(得分:0)
这归结为从[1, N]
抽取随机样本,其中N是每次试验所需的样本编号。然后,使用k个不同的排列直接索引数据矩阵的列。示例(样本= 50,试验= 1000,子集= 40):
x = randn(2, 50); % example data matrix
N = 50; nTrials = 1000; nSamples = 40;
要生成不重复的样本,或不带替换的采样,您可以使用调用rand
的{{3}}。
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