如何在VARMAX模型中使用多前一步的外生变量

Posted

技术标签:

【中文标题】如何在VARMAX模型中使用多前一步的外生变量【英文标题】:How to use multi previous step of exogenous variables in VARMAX model 【发布时间】:2021-09-20 16:44:06 【问题描述】:

我有一个多变量和多时间步长预测问题。基本上,我有一个预测的目标 y,作为时间序列。和几个外生变量x。它们也是时间序列数据。

我希望使用 4 天的延迟来预测 y 的未来值。所以基本上是这样的。请注意,我也希望使用 x(t) 数据进行预测。

y(t)=f(y(t-4), y(t-3), y(t-2), y(t_1), x(t-4), x(t-3), x(t-2), x(t-1), x(t))

但看起来来自 statsmodel 的 VARMAX 模型只考虑了 x 的一个时间步?

另外,当 x 可用时,我如何预测 y 的多步?我认为我应该将 x 视为外生变量。

【问题讨论】:

顺序是滞后数。订单 (4,0) 将包括模型中所有变量的 t-1, ..., t-4。您不能在右侧包含 x(t),因为这会导致识别问题。如果你想这样做,你需要研究结构 VAR。 【参考方案1】: 要使用 y 的 4 步滞后,p 阶应为 4,即 order = (4,0) 要使用外生变量 x 的 4 步滞后,您必须创建 手动将所有滞后的外生变量传递给 exog= 参数作为一个数据帧。

令 x 为包含所有外生变量的 pandas 数据框。 我们可以使用下面的代码创建x_lag 数据框,并将其传递给exog= 参数:

x_list = []

for q in range(5):
    x_lagged = x.shift(q).bfill()
    x_list.append(x_lagged)
    
x_lag = pd.concat(x_list,axis=1)

最后,你拟合和预测如下:

model = VARMAX(y, order=(4,0), exog=x_lag)
model_fit = model.fit()
# Suppose you have some later observations of the exogenous variables: x_lag_pred
# and you want to forecast 10 steps ahead.
model_fit.forecast(steps=10, exog=x_lag_pred.iloc[:10,:])

【讨论】:

以上是关于如何在VARMAX模型中使用多前一步的外生变量的主要内容,如果未能解决你的问题,请参考以下文章

具有外生变量矩阵的 statsmodels SARIMAX 大小不同

带有外生变量的 SARIMAX 滚动窗口

经济学中的内生性和外生性是啥意思?

Python:仅使用 1 个外生变量执行数百万次简单线性回归的最快方法

什么是外生变量和内生变量

如何在openGL中制作一步一步的显示动画?