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

+0

그것은 내가 필요로하는 것에 적합하지 않습니다. 각 열과 다른 열의 상관 관계를 계산하려면 각 열 사이의 상관 관계가 아니라 – KatyB

답변

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

+0

@Kate : ARRAYFUN에는 기본적으로 루프가 숨겨져 있습니다. 말할 필요도 없지만 더 읽기 쉽습니다. – Amro