在MATLAB中使用矩阵而不是矢量的Bootstrp



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

我需要对它们进行加扰,以便创建新的随机相关性,如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进行采样而不进行替换,这将返回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

相关内容

  • 没有找到相关文章

最新更新