2

我正在努力使用 ARMAX 模型预测样本值。

拟合模型工作正常。

armax_mod31 = sm.tsa.ARMA(endog = sales, order = (3,1), exog = media).fit()
armax_mod31.fittedvalues

就我有一个相应的模型而言,没有外生值的预测也可以正常工作。

arma_mod31 = sm.tsa.ARMA(sales, (3,1)).fit()
all_arma = arma_mod31.forecast(steps = 14, alpha = 0.05)
forecast_arma = Series(res_arma[0], index = pd.date_range(start = "2013-08-21", periods = 14)) 
ci_arma = DataFrame(res_arma[2], columns = ["lower", "upper"])

但是,一旦我想预测样本值之外,我就会遇到问题。

all_armax = armax_mod31.forecast(steps = 14, alpha = 0.05, exog = media_out)

导致“ValueError:矩阵未对齐”。

我的第一个想法是,*media_out* 的长度不合适。我检查了几次,并尝试将其他系列作为 exog 传递。exog 的长度与步数相同。我尝试了一个时间序列,也只有 *media_out.values*。

检查了文档:

"exog : array
If the model is an ARMAX, you must provide out of sample
values for the exogenous variables. This should not include
the constant."

据我了解,这就是我所做的。任何想法我做错了什么?此外,我在网上寻找解决方案时发现了这个 ipython 笔记本http://nbviewer.ipython.org/cb6e9b476a41586958b5 。On In [53]:您可以看到类似的错误。作者的评论表明样本外预测存在一般问题,对吗?

我正在运行 python 2.7.3、pandas 0.12.0-1 和 statsmodels 0.5.0-1。

4

1 回答 1

1

啊,我看到了问题。您还需要传递过去的数据。例如,如果您想预测 ARMAX(2,q) 模型的 12 步,则 exog 的长度应为 14。您需要两个额外的滞后才能预测 1 步。因此,如果您确保 exog 是 2d,这应该可以按预期工作。

无论如何我都看不到这一点,但是如果您认为这里有什么需要改进的地方,请告诉我。现在我会在文档中注明。

[编辑:我意识到这个要求很愚蠢。使用 ARMA 预测https://github.com/statsmodels/statsmodels/pull/1124时,您不再需要提供任何样本内变量。]

于 2013-09-10T21:56:24.753 回答