2012-07-19 53 views
1

之間的關係。如果我有一個矩陣:計算幾個時間序列

data = rand(365,5); 

什麼是計算每列,其餘列的平均值之間的相關性的最合適的方式。例如,對於第一列:

R = nonzeros(tril(corrcoef(data(:,1),mean(data(:,2:end)')'),-1)); 

我怎麼能重複這個過程,使我有5個相關值,即每個系列?

編輯:

感謝您的意見。這也可以在一行中完成:

R = arrayfun(@(x)nonzeros(tril(corrcoef(data(:,x),... 
    mean(data(:,setdiff(1:size(data,2),x))')'),-1)),1:size(data,2)); 

對於那些希望避免循環的人。雖然在這種情況下,由於其可讀性,下面所示的方法更好。

+0

是否'corrcoef(數據)'不工作?它應該返回包含所有可能的列組合之間相關性的5x5矩陣。 – slayton 2012-07-19 17:21:08

+0

它確實不適合我需要的功能。我想計算每列與其他列的平均值之間的相關性,而不是每列 – KatyB 2012-07-19 17:28:32

回答

1
for i=1:5 
    x = data(:,i); 
    y = mean(data(:,(1:5) ~= i)')'; 
    R(i) = nonzeros(tril(corrcoef(x,y),-1)); 
end 
1

稍微簡化版本:

R = zeros(1,5); 
for i=1:5 
    x = data(:,i); 
    y = mean(data(:,(1:5)~=i), 2); 
    R(i) = corr(x,y); 
end 
+0

之間的相關性,非常感謝。也可以通過使用上面顯示的方法避免循環(編輯) – KatyB 2012-07-21 08:36:38

+0

@Kate:你並不真正避免循環,ARRAYFUN基本上隱藏了一個循環。更不用說這是更可讀的方式.. – Amro 2012-07-21 16:16:43