在 MATLAB 中使用矩阵而不是向量进行引导?

Bootstrp with matrices instead of vectors in MATLAB?

我正在使用 xcorr 来计算两个时间序列之间的互相关。为了评估统计显着性,我需要执行 bootstrapping 并在两个时间序列之间创建随机相关性以创建空分布。因此,例如 timeseries1 的大小为 16x11(即 16 个时间点和 11 个主题),timeseries2 的大小也为 16x11。这里的主题是配对的,例如 , timeseries1(:,1)timeseries2(:,1) 匹配;即 timeseries1 是主题一的一种数据类型,timeseries2(:,1) 是主题一的不同类型的数据。

我需要打乱它们,以便创建新的随机相关性,例如 timeseries1(:,1)timeseries2(:,5)

我尝试使用 boostrp 如下

scorr = @(timseries1,timeseries2)(xcorr(timseries1,timeseries2,'coeff'));
bootstat = bootstrp(1000,scorr,a,b);

但是,我遇到了一个错误,因为 bootstrap 只接受向量而不接受矩阵。在该函数的文档中,提供的所有示例都具有每个科目 1 个值的数据,例如 15 个科目的 LSAT 分数与 15 个科目的其他测试分数相关。但是我每个主题有 16 个样本,如果我将时间序列减少到一个时间点,我将无法进行互相关。

有人对如何做到这一点有任何建议吗?

您可以使用 randperm 进行无放回采样,这将 return 1:n_subjects:

之间的两个不同的随机整数
n_boot = 100;
n_subj = 11;
n_samples = 16;
timeseries1 = randn(n_samples, n_subj);
timeseries2 = randn(n_samples, n_subj);


null_dist = nan(n_boot,  ...
                n_samples*2-1);
for i = 1:n_boot
    
    subjs_to_corr = randperm(n_subj, 2);  % draw 2 random numbers from 1:n_subj without replacement
    
    null_dist(i, :) = xcorr(timeseries1(:, subjs_to_corr(1)),  ... 
                            timeseries2(:, subjs_to_corr(2)));
end