我正在努力用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 在网上寻找解决方案。 在在[53]:中,您可以看到类似的错误。作者的评论提出了样本外预测的一般问题,我是对的吗?
我正在运行python 2.7.3,pandas 0.12.0-1和statsmodels 0.5.0-1。
答案 0 :(得分:1)
啊,我看到了这个问题。您还需要传递过去的数据。例如,如果你想预测ARMAX(2,q)模型的12个步骤,那么exog应该是14的长度。你需要两个额外的滞后来预测1步。因此,如果您确保exog为2d,则应该按预期工作。
我无论如何都看不到这一点,但如果您认为这里有待改进,请告诉我。现在我将在文档中注明。
[编辑:我意识到这个要求很愚蠢。使用ARMA预测https://github.com/statsmodels/statsmodels/pull/1124.]
时,您不再需要提供任何样本内变量