2012-07-19 32 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