【问题标题】:xcorr (for autocorrelation) with NaN valuesxcorr(用于自相关)与 NaN 值
【发布时间】: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


    【解决方案1】:

    根据 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 方法对于大数据集来说要快得多。

    【讨论】:

      【解决方案2】:

      我宁愿从相关性中排除带有 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,你会损害滞后关系。恕我直言,正确的做法是在应用后移运算符(如上所示)后取消包括 NaN 在内的对
      【解决方案3】:

      当然。您可以使用索引仅选择那些不是 NaN 的项目,然后调用 xcorr

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

      【讨论】:

      • 当该配对应该包含在 lag=2 中时,肯定会让 4 和 2 参与到 lag=1 中吗?
      • 要么就是这样,要么用零替换 NaN 值:data(isnan(data)) = 0;
      猜你喜欢
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2018-07-13
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多