1

我正在 R 中开发向量自回归 (VAR) 时间序列模型。模型规范包括一个称为“endog”的内生变量矩阵(xts类)和一个称为“exog”的外生变量矩阵(也是xts类)。数据是季节性的,我希望预测季节性,因此我还指定“season = 12”,因为数据是每月的。所以我执行 var 模型的 R 代码是:

fit <- var(endog, p = 1, season = 12, type = 'const', exogen = exog)

这段代码运行流畅。但现在我想预测未来 24 个时期的数据。所以我的预测代码是:

predictions <- predict(fit, exo.fcst = exog_future, n.ahead = 24, ci = 0.95)

其中“exog_future”是与 exog 中相同变量的矩阵(也是xts类),但包括要预测的 24 个未来时期。(我尝试了两个版本:一个包含历史数据 exog 加上接下来 24 个时期的新数据,另一个版本只包含 24 个时期。)

我收到以下错误消息:

predict.varest(VAR(endog, p = 1, season = 12, type = "const", : 没有提供 dumvar 的矩阵,但对象 varest 包含外生变量。

显然,除了外生变量之外,R 还需要一个虚拟变量矩阵。除非 R 将“season = 12”规范视为虚拟变量矩阵,否则模型规范不包含虚拟变量,那么为什么它现在需要虚拟变量呢?如果它确实将季节性规范视为虚拟变量,那么我将“season = 12”添加到我的预测代码中。我收到了同样的错误信息。

我知道如果模型包含外生变量,那么我必须在预测代码中为这些变量提供未来值。我也明白,如果我提供了虚拟变量,那么出于基本相同的原因,该预测也需要这些变量的未来值。它们是外生变量,只是二元变量。

因此,当模型规范不包含虚拟变量时,R 期望我为“dumvar”提供什么?

4

1 回答 1

1

实际上,当您在训练中有外生值时,您必须将未来的外生值exog_future作为参数包含dumvar在函数predict()中,在您的情况下,您应该设置dumvar=exog_future

predictions <- predict(fit, dumvar = exog_future, n.ahead = 24, ci = 0.95)

在 R 文档http://127.0.0.1:26594/library/vars/html/predict.html中,它说函数的主要参数predict()object,和n.ahead,所以为了避免混淆,也许你应该忽略这个参数。这令人困惑,因为它似乎是正确的参数,但实际上您应该始终使用它,而不是.cidumvarexo.fcstexo.fcstexog_futuredumvarexo.fcst

于 2017-08-03T20:11:24.787 回答