2011-08-12 28 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); 

そうでない場合、これは使用ムーとstdの値に影響を与えるように、前に、データをスケーリングした後にゼロを挿入する必要はありません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

を役に立てば幸い? – Alex

+1

これは、NaN値をゼロで置き換えるかどうかです:data(isnan(data))= 0; – Nzbuu

3

ゼロを導入するのではなく、NaNのカップルを相関から除外することをお勧めします。この場合、私は、corr(ピアソンの自己相関係数)に基づいて、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') 

は、それは確かにそれはそのペアリングが遅れ= 2に含まれるべきであるとき、4と2が遅れ= 1で自分が関与することができます

+1

結果にバイアスをかけようとしている零点を追加すると、NaNを離した場合、遅延関係が損なわれます。 IMHOこれを行う適切な方法は、バックシフト演算子を適用した後にNaNを含むカップルを離すことです(上記のように) – Fabio

関連する問題