calculate the correlation of a number of time series

2 次查看(过去 30 天)
If I have a matrix:
data = rand(365,5);
What is the most appropriate way of calculating the correlation between each column and the mean of the remaining columns. For example, for the first column:
R = nonzeros(tril(corrcoef(data(:,1),mean(data(:,2:end)')'),-1));
How could I repeat this procedure so that I have 5 correlation values i.e. for each series?

采纳的回答

Andrei Bobrov
Andrei Bobrov 2012-7-20
编辑:Andrei Bobrov 2012-7-20
R = arrayfun(@(x)nonzeros(tril(corrcoef(data(:,x),mean(data(:,setdiff(1:size(data,2),x))')'),-1)),1:size(data,2));
or
for k = size(data,2):-1:1
R(k) = nonzeros(tril(corrcoef(data(:,k),mean(data(:,[1:k-1,k+1:end]),2)),-1));
end
or
for k = size(data,2):-1:1
p = corrcoef(data(:,k),mean(data(:,[1:k-1,k+1:end]),2));
R(k) = p(2);
end

更多回答(2 个)

bym
bym 2012-7-19
Don't know what you are trying to accomplish, but here is one way
clc; clear
data = rand(365,5);
for k = 1:5
r = corrcoef(data(:,1),mean(data(:,2:end),2));
R(k) = r(2);
data = circshift(data,-1);
end
R

Teja Muppirala
Teja Muppirala 2012-7-20
diag( corr( bsxfun(@minus, sum(data,2), data), data) )

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by