2012-01-11 121 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