为什么NUMPY相关并且corrcoef返回不同的值以及如何在"完整"模式中"标准化"相关性?

Joh*_*son 18 python numpy time-series normalization correlation

我正在尝试使用Numpy在Python中使用一些时间序列分析.

我有两个中等大小的系列,每个都有20k值,我想检查滑动相关性.

corrcoef给我输出一个自相关/相关系数矩阵.在我的案例中没有任何有用的东西,因为其中一个系列包含滞后.

相关函数(在mode ="full"中)返回一个40k元素列表,看起来像我想要的结果类型(峰值远离列表中心,如滞后所示),但是这些值都很奇怪 - 高达500,当我期待从-1到1的东西时.

我不能把它全部除以最大值; 我知道最大相关性不是1.

我怎样才能规范化"互相关"("完全"模式中的相关性),因此返回值将是每个滞后步骤的相关性,而不是那些非常大的奇怪值?

Jus*_*eel 26

您正在寻找标准化的互相关.Numpy中尚未提供此选项,但是补丁正在等待审核,它可以满足您的需求.我认为应用它应该不会太难.大多数补丁只是doc string的东西.它添加的唯一代码行是

if normalize:
    a = (a - mean(a)) / (std(a) * len(a))
    v = (v - mean(v)) /  std(v)
Run Code Online (Sandbox Code Playgroud)

其中a和v是输入的numpy数组,你发现它们是互相关的.将它们添加到您自己的Numpy发行版中或者只是复制相关函数并在那里添加行应该不难.如果我选择走这条路,我会亲自做后者.

另一种可能更好的替代方法是在将输入向量发送到关联之前对输入向量进行标准化.这取决于你想要做哪种方式.

顺便说一句,根据维基百科的互相关页面,这似乎是正确的规范化,除了除以len(a)而不是(len(a)-1).我觉得这种差异类似于样本与样本标准偏差的标准偏差,在我看来真的不会产生很大差异.

  • 如果有人正在寻找它,补丁(仍在等待)现在在[github](https://github.com/numpy/numpy/issues/2310). (5认同)