使用两个变量X和Y执行滚动向量自动回归,在Python中X有时间滞后



我必须对Y的滚动窗口和X的时间滞后版本执行线性回归,即找到Y(t) = aX(t-1) + b。窗口大小固定为30个样本。我想返回一个包含所有系数的numpy数组。有什么快速的方法吗?我读过Savitsky-Golay过滤器,但它只对X进行了时间滞后的回归。谢谢!

有一些比较快捷的方法。

我假设你只对信号y的斜率和平均值感兴趣。为了计算这些,你需要有:

  • 总和(Y)
  • (X)和
  • 总和(X.X)
  • 总和(X.Y)

所有的总和都在窗口中的样本上。当你有这些时,平均值是:

sum(Y)/n

和斜率:

(和(X.Y)和(X) (Y/n)/(和(X.X)和(X) ^ 2/n)

为了做出一个快速的算法,值得注意的是,除了sum(X.Y)之外,所有这些都可以用简单的方式从X或y中计算出来。滚动和的计算速度非常快,因为它们是两个样本差异的累积和("进入窗口"减去"从窗口流出")。

每个时间步只需要单独计算sum(X.Y)。

所有这些操作都可以矢量化,尽管时间延迟可能更容易写成循环,而不会对性能造成明显影响。通过这种方式,您将能够每秒计算数千万次回归。这样够快吗?