私はいくつかのデータを自己相関したいと思いますが、いくつかの欠損値があります.Matlabでこれを行う簡単な方法はありますか?入力のいずれかがNaNの場合、xcorrはNaNの配列を返します。xcorr(自己相関のために)NaN値で
data = [1 2 3 4 NaN 2 3 4 1 2 3 4];
xc = xcorr(data, 'biased');
私はいくつかのデータを自己相関したいと思いますが、いくつかの欠損値があります.Matlabでこれを行う簡単な方法はありますか?入力のいずれかがNaNの場合、xcorrはNaNの配列を返します。xcorr(自己相関のために)NaN値で
data = [1 2 3 4 NaN 2 3 4 1 2 3 4];
xc = xcorr(data, 'biased');
:
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を直接操作するよりも、これを行う方が良いです。
確かに。索引付けを使用して、NaNではないアイテムのみを選択し、xcorr
を呼び出すことができます。 Nzbuuからいくつかの洞察、以下の作品で
data = [1 2 3 4 NaN 2 3 4 1 2 3 4];
xc = xcorr(data(~isnan(data)), 'biased');
ゼロを導入するのではなく、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で自分が関与することができます
結果にバイアスをかけようとしている零点を追加すると、NaNを離した場合、遅延関係が損なわれます。 IMHOこれを行う適切な方法は、バックシフト演算子を適用した後にNaNを含むカップルを離すことです(上記のように) – Fabio
を役に立てば幸い? – Alex
これは、NaN値をゼロで置き換えるかどうかです:data(isnan(data))= 0; – Nzbuu