具有NaN值的xcorr(用于自相关)

时间:2011-08-12 06:58:43

标签: matlab correlation

我想自动更新一些数据,但它有一些缺失值,有没有快速的方法在matlab中执行此操作?如果任何输入是NaN,则xcorr返回NaN数组。

e.g。

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

3 个答案:

答案 0 :(得分:5)

根据Nzbuu的一些见解,以下作品:

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

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

corr = xcorr(scaled);

在缩放数据之后,有必要插入零,而不是之前,否则这将影响xcorr中使用的mu和std的值。最好这样做,而不是简单地直接计算xcorr,因为xcorr中使用的fft方法对于大数据集要快得多。

答案 1 :(得分:3)

我宁愿从相关性中排除NaN的夫妻而不是引入零。在这种情况下,我将在matlab中使用以下代码,基于corr(Pearson的自相关系数)。

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 :(得分:2)

不确定。您可以使用索引来仅选择那些不是NaN的项目,并在其上调用xcorr

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