2011-08-12 9 views
1

일부 데이터는 자동 상관하고 싶지만 누락 된 값이 있습니다. matlab에서이 작업을 수행하는 빠른 방법이 있습니까? 입력이 NaN이면 xcorr은 NaN의 배열을 반환합니다.xcorr (자기 상관 관계) NaN 값으로

data = [1 2 3 4 NaN 2 3 4 1 2 3 4]; 
xc = xcorr(data, 'biased'); 

답변

4

:

data = [1 2 3 4 NaN 2 3 4 5]; 

scaled = (data - nanmean(data))/nanstd(data); 
scaled(isnan(data)) = 0; 

corr = xcorr(scaled); 

그렇지 않으면이 사용 MU 및 표준의 가치에 영향을 미칠 것 같이하지 전에 데이터를 확장 한 후 0을 삽입 할 필요가있다 xcorr 내에서. xcorr에서 직접 사용하는 fft 접근법은 큰 데이터 집합에서 훨씬 빠르기 때문에 xcorr을 직접 사용하는 것보다이 작업을 수행하는 것이 좋습니다.

2

확실히. 색인 생성을 사용하면 NaN이 아닌 항목 만 선택하고 xcorr을 호출 할 수 있습니다. Nzbuu, 다음 작품에서 몇 가지 통찰력으로

data = [1 2 3 4 NaN 2 3 4 1 2 3 4]; 
xc = xcorr(data(~isnan(data)), 'biased'); 
+0

반드시 그 4 수하고 페어링이 지연 = 2에 포함되어야 할 때 2 지연 = 1에서 자신을 포함 도움이되기를 바랍니다? – Alex

+1

그것은 NaN 값을 0으로 대체하거나 다음과 같습니다. data (isnan (data)) = 0; – Nzbuu

3

0을 도입하는 대신 NaN의 상관 관계를 제외하는 것이 좋습니다. 이 경우 나는 corr (Pearson의 자기 상관 계수)를 기반으로 matlab에서 다음 코드를 사용합니다.

out=zeros(nlags,1); 
out(1)=1; 
for i=2:nlags+1 
    out(i)=corr(data(i:end),data(1:end-i+1),'rows','complete'); 
end 
stem(0:nlags,out) 
title('sample ACF') 

+1

결과를 바이어스하려고하는 0을 추가하면 NaN을 제거하면 지연 관계가 손상됩니다. 이럴 (IMHO) 올바른 방법은 백 - 시프트 연산자를 적용한 후 NaN을 포함한 커플을 제거하는 것입니다 (위에서 보여준 것처럼) – Fabio

관련 문제