【发布时间】:2011-08-12 06:58:42
【问题描述】:
我想自动关联一些数据,但它有一些缺失值,在 matlab 中有没有快速的方法来做到这一点?如果任何输入为 NaN,xcorr 将返回一个 NaN 数组。
例如
data = [1 2 3 4 NaN 2 3 4 1 2 3 4];
xc = xcorr(data, 'biased');
【问题讨论】:
标签: matlab correlation
我想自动关联一些数据,但它有一些缺失值,在 matlab 中有没有快速的方法来做到这一点?如果任何输入为 NaN,xcorr 将返回一个 NaN 数组。
例如
data = [1 2 3 4 NaN 2 3 4 1 2 3 4];
xc = xcorr(data, 'biased');
【问题讨论】:
标签: matlab correlation
根据 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 方法对于大数据集来说要快得多。
【讨论】:
我宁愿从相关性中排除带有 NaN 的对,而不是引入零。在这种情况下,我将在 matlab 中使用以下代码,基于 corr(皮尔逊的自相关系数)。
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')
希望对你有帮助
【讨论】:
当然。您可以使用索引仅选择那些不是 NaN 的项目,然后调用 xcorr。
data = [1 2 3 4 NaN 2 3 4 1 2 3 4];
xc = xcorr(data(~isnan(data)), 'biased');
【讨论】: