2012-01-11 115 views
1

我想在我的脚本中包含一个循环,它找到数据的每个可能组合的相关性。这可以手动将下面的代码来完成:遍历所有可能的组合

clear all 
%generate fake data 
LName={'Name1','Name2','Name3'}; 
Data={rand(12,1),rand(12,1),rand(12,1)}; 
%place in a structure 
d = [LName;Data]; 
Data = struct(d{:}); 
%find the correlation 
[R,P] = corrcoef(Data.Name1,Data.Name2); 
[R2,P2] = corrcoef(Data.Name1,Data.Name3); 
[R3,P3] = corrcoef(Data.Name2,Data.Name3); 

不过,我想这样做在一个循环中,我已经开始,但在第一关都失败了。我试图循环,不工作如下:

SNames=fieldnames(Data); 
for i=1:numel(SNames); 
    [R{i},P{i}] = corrcoef(Data.(SNames{i}),Data.(SNames{i+1})); 
end 

我挣扎于知道如何通过值与每次迭代的不同组合告诉MATLAB循环。

提供的任何帮助将不胜感激。

回答

2

尝试这样:

pairs = combnk (1:3,2) % all combinations of 2 elements taken out of the vector [1,2,3] 
for i = 1 : size (pairs,1) 
    [R{i},P{i}] = corrcoef(Data.(SNames{pairs(i,1)}),Data.(SNames{pairs(i,2)})); 
end 
+0

完美。但是,为了将来的参考,可以不同地使用线对= combnk(1:3,2),即如果您想查找3个元素之间的相关性,您可以将此线更改为pairs = combnk(1:3,3)?感谢您的帮助 – user1053544 2012-01-11 16:07:58

+0

只有拥有统计工具箱 – 2012-01-11 16:11:59

+0

yes,但是从3种可能的索引中挑选3个元素只有一种可能性(1,2,3),这才会起作用。而且,三个元素之间的相关性是什么......? – 2012-01-12 09:04:17

1

@ItamarKatz答案是一个很好的一个。但是,如果您没有统计工具箱,则不能使用combink命令。
在这种情况下,您可以从这里下载combinations generator

+0

感谢您的纠正,我不知道它是统计工具箱的一部分。 – 2012-01-12 09:01:29