【问题标题】:How do I perform crosscorelation between two time series and what transformations should I perform in python?如何在两个时间序列之间执行互相关以及我应该在 python 中执行哪些转换?
【发布时间】:2020-06-11 23:53:40
【问题描述】:

我有两个时间序列数据集,即三年内每天收到的错误和预订(几百万行)。我希望找出它们之间是否有任何关系。截至目前,我认为这两个系列之间的互相关可能会有所帮助。我命令这样做,我是否应该执行任何转换,如平稳性、去趋势、去季节性等。如果这是正确的,我正在考虑使用“scipy.signal.correlate¶”但真的很想知道如何解释结果?

【问题讨论】:

  • 从描述看来,你应该使用NumPy的corrcoefnumpy.org/devdocs/reference/generated/numpy.corrcoef.html
  • 我在寻找时间序列变量。 np.corrcef 只是普通的旧皮尔逊系数,在这种情况下不能使用。
  • scipy.signal.correlate 确实是为了时间序列的相关性。对于序列y1y2correlate(y1, y2) 返回一个向量,表示时间相关性:第 k 个值表示时间滞后为“k - N + 1”的相关性,因此 N+第一个元素是没有时间滞后的时间序列的相似性。
  • 你能解释一下它们之间的区别吗?另外,在将它们传递给函数之前,我是否应该执行任何去趋势、反季节等操作?
  • scipy.signal.correlate 采用两个时间序列并返回它们之间的时间相关性。 numpy.corrcoef 采用两个数组并将相关性聚合为一个值(另一个例程的“时间 0”),并针对 N 行执行此操作,返回一个 NxN 相关性数组。对角线应该是 1(自相关)。

标签: python scipy time-series cross-correlation


【解决方案1】:

scipy.signal.correlate 用于时间序列的相关性。对于序列y1y2correlate(y1, y2) 返回一个向量,表示时间相关性:第 k 个值表示时间滞后为“k - N + 1”的相关性,因此 N+第一个元素是没有时间滞后的时间序列的相似性:如果 y1 和 y2 具有相似的趋势(对于标准化数据),则接近 1,如果序列独立,则接近 0。

numpy.corrcoef 采用两个数组并将相关性聚合到一个值(另一个例程的“时间 0”)中,即 Pearson 相关性,并针对 N 行执行此操作,返回一个 NxN 相关性数组。 corrcoef 对数据进行归一化(将结果除以它们的 rms 值),因此他的对角线应该是 1(平均自相关)。

关于平稳性、去趋势和反季节性的问题取决于您的具体问题。上面的例程考虑了“普通”数据而不考虑它们的含义。

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 2014-12-27
    相关资源
    最近更新 更多