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

问题描述

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

我需要对它们进行加扰,以便创建新的随机相关性,例如timeseries1(:,5)等。

我正尝试如下使用boostrp

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

但是,由于引导程序仅接受向量而不接受矩阵,因此出现错误。在功能文档中,提供的所有示例的数据均为每位受试者1个值,因此,例如15位受试者的LSAT得分与15位受试者的其他测试得分相关。但是我每个主题有16个样本,如果将时间序列减少到一个时间点,我将无法进行互相关。

有人对此有何建议?

解决方法

您可以使用randperm进行抽样而不进行替换,这将在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