在MATLAB中的三维数组中进行signrank测试

时间:2014-10-06 07:48:11

标签: arrays matlab statistics

我有一个60x60x35阵列,并希望计算Wilcoxon符号秩检验,以计算第三个数组维度(即35个值)的每个元素值的中位数是否不等于零。因此,我希望我的结果在两个60x60阵列中 - 取决于测试统计值,值为0和1,并且在具有相应p值的单独数组中。

我面临的问题是以期望输出具有适当尺寸的方式指定命令,并且将在数组的适当维度上计算。

感谢您的帮助,一切顺利!

1 个答案:

答案 0 :(得分:0)

因此解决问题的一种方法是使用嵌套的for循环。假设您的数据存储在data

data=rand(60,60,35);
size_data=size(data);
p=zeros(size_data(1),size_data(2));
p(:,:)=NaN;
h=zeros(size_data(1),size_data(2));
h(:,:)=NaN;
for k=1:size_data(1)
    for l=1:size_data(2)
       tmp_data=data(k,l,:);
       tmp_data=reshape(tmp_data,1,numel(tmp_data));
       [p(k,l), h(k,l)]=signrank(tmp_data);
    end
end

我正在做的是我将p,h的内存预先分配为60x60矩阵。然后我将它们设置为NaN,所以如果你能很容易地看出是否出错(0将是可接受的结果)。现在我遍历所有元素并将实际数据数组存储在一个新变量中。 signrank需要数据为数组,因此我将其重塑为二维。
我想你可以使用bsxfun

跳过这些循环