【问题标题】:Autocorrelation to estimate periodicity with numpy用 numpy 估计周期性的自相关
【发布时间】:2018-05-01 06:42:51
【问题描述】:

我有大量的时间序列 (> 500),我想只选择那些周期性的。我做了一些文献研究,发现我应该寻找自相关。使用numpy,我将自相关计算为:

def autocorr(x):
    norm = x - np.mean(x)
    result = np.correlate(norm, norm, mode='full')
    acorr = result[result.size/2:]
    acorr /= ( x.var() * np.arange(x.size, 0, -1) )
    return acorr

这会返回一组系数 (r?),当绘图时应该告诉我时间序列是否是周期性的。

我生成了两个玩具示例:

#random signal
s1 = np.random.randint(5, size=80)
#periodic signal
s2 = np.array([5,2,3,1] * 20)

当我生成我获得的自相关图时:

第二个自相关向量清楚地表明了一些周期性:

Autocorr1 =  [1, 0.28, -0.06,  0.19, -0.22, -0.13,  0.07 ..]
Autocorr2 =  [1, -0.50, -0.49,  1, -0.50, -0.49,  1 ..]

我的问题是,如何根据自相关向量自动确定时间序列是否是周期性的?有没有办法将这些值总结为一个系数,例如if = 1 完美周期性,if = 0 完全没有周期性。我试图计算平均值,但它没有意义。我应该看数字1吗?

【问题讨论】:

  • 您在寻找Durbin-Watson test statistic吗?
  • @user2699 我确实读过它,但是它不能解决自动识别时间序列是否是周期性的问题。我无法手动查看 500 个自相关图。
  • @BradSolomon Durbin-Watson 应该用于测试回归模型的残差。就我而言,回归模型是什么?
  • 回归是基于其自身滞后值的时间序列。 DW 测试自相关的强度/存在。

标签: python numpy time-series correlation


【解决方案1】:

我会使用 mode='same' 而不是 mode='full' 因为使用 mode='full' 我们会得到极端变化的协方差,其中只有 1 个数组元素与自身重叠,其余的为零。这些不会很有趣。使用 mode='same' 至少一半的移位数组与原始数组重叠。

此外,要获得真正的相关系数 (r),您需要除以重叠的大小,而不是原始 x 的大小。 (在我的代码中这些是np.arange(n-1, n//2, -1))。那么每个输出将在 -1 和 1 之间。

看一下Durbin–Watson statistic,它类似于 2(1-r),表明人们认为它的值低于 1 是自相关的重要指示,对应于 r > 0.5。所以这就是我在下面使用的。有关自相关重要性的统计合理处理,请参阅统计文献;一个起点是为您的时间序列建立一个模型。

def autocorr(x):
    n = x.size
    norm = (x - np.mean(x))
    result = np.correlate(norm, norm, mode='same')
    acorr = result[n//2 + 1:] / (x.var() * np.arange(n-1, n//2, -1))
    lag = np.abs(acorr).argmax() + 1
    r = acorr[lag-1]        
    if np.abs(r) > 0.5:
      print('Appears to be autocorrelated with r = {}, lag = {}'. format(r, lag))
    else: 
      print('Appears to be not autocorrelated')
    return r, lag

两个玩具示例的输出:

似乎不是自相关
似乎与 r = 1.0, lag = 4 自相关

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 2012-12-27
    • 1970-01-01
    • 2019-01-08
    • 2013-04-06
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    相关资源
    最近更新 更多