如何更改 ARMAX.predict 的 maxlag?
How to change maxlag for ARMAX.predict?
还在了解ARIMA源代码预测一些数据的过程中。 (我使用两个时间序列(indexed_df 和 external_df,每个时间序列有 365 个数据点。)
我想比较一下 ARMA 和 ARMAX 的预测精度。
ARMA 的预测过程似乎运行良好。但是用一个额外的外部变量进行预测不知何故不起作用:
获取 ARMAX 的 p 和 q 值:
arma_mod1 = sm.tsa.ARMA(indexed_df, (2,0), external_df).fit()
y = arma_mod1.params
print 'P- and Q-Values(ARMAX):'
print y
输出:
P- and Q-Values(ARMAX):
const 34.739272
0 0.000136
ar.L1.0 0.578090
ar.L2.0 0.129253
dtype: float64
获取预测值(样本内):
start_pred = '2013-12-30'
end_pred = '2013-12-30'
period = (start_pred, end_pred)
predict_price1 = arma_mod1.predict(start_pred, end_pred, exog=True, dynamic=True)
print ('Predicted Price (ARMAX): {}' .format(predict_price1))
输出:
Traceback (most recent call last):
File "<ipython-input-102-78b3d705d411>", line 6, in <module>
predict_price1 = arma_mod1.predict(start_pred, end_pred, exog=True, dynamic=True)
File "/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/base/wrapper.py", line 92, in wrapper
return data.wrap_output(func(results, *args, **kwargs), how)
File "/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/tsa/arima_model.py", line 1441, in predict
return self.model.predict(self.params, start, end, exog, dynamic)
File "/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/tsa/arima_model.py", line 736, in predict
start, method)
File "/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/tsa/arima_model.py", line 327, in _arma_predict_out_of_sample
exog)
File "/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/tsa/arima_model.py", line 293, in _get_predict_out_of_sample
X = lagmat(np.dot(exog, exparams), p, original='in', trim='both')
File "/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/tsa/tsatools.py", line 328, in lagmat
raise ValueError("maxlag should be < nobs")
ValueError: maxlag should be < nobs
我对 maxlag 的理解是(如果之前没有定义)要观察的滞后数将自动计算为:
maxlag = int(round(12*(nobs/100.)**(1/4.)
但我不明白我可以在哪里更改此计算或设置 maxlag 的数量。
我对 nobs 的理解是时间步数,即我在时间序列中的值。 (在我的例子中是 365)。
所以这意味着我需要 maxlag < 365,对吗?
在哪里可以定义maxlag的数量?
同样的错误出现在这个问题中:ADF test in statsmodels in Python但是我不知道在哪里设置 ARMAX 预测的 maxlag。
感谢帮助
代码:
predict_price1 = arma_mod1.predict(start_pred, end_pred, exog=True, dynamic=True)
print ('Predicted Price (ARMAX): {}' .format(predict_price1))
必须改为:
predict_price1 = arma_mod1.predict(start_pred, end_pred, external_df, dynamic=True)
print ('Predicted Price (ARMAX): {}' .format(predict_price1))
这样就可以了!
我比较了没有 external_df
的值,它们不同,我想这可以看作是一个证据。
还在了解ARIMA源代码预测一些数据的过程中。 (我使用两个时间序列(indexed_df 和 external_df,每个时间序列有 365 个数据点。)
我想比较一下 ARMA 和 ARMAX 的预测精度。
ARMA 的预测过程似乎运行良好。但是用一个额外的外部变量进行预测不知何故不起作用:
获取 ARMAX 的 p 和 q 值:
arma_mod1 = sm.tsa.ARMA(indexed_df, (2,0), external_df).fit()
y = arma_mod1.params
print 'P- and Q-Values(ARMAX):'
print y
输出:
P- and Q-Values(ARMAX):
const 34.739272
0 0.000136
ar.L1.0 0.578090
ar.L2.0 0.129253
dtype: float64
获取预测值(样本内):
start_pred = '2013-12-30'
end_pred = '2013-12-30'
period = (start_pred, end_pred)
predict_price1 = arma_mod1.predict(start_pred, end_pred, exog=True, dynamic=True)
print ('Predicted Price (ARMAX): {}' .format(predict_price1))
输出:
Traceback (most recent call last):
File "<ipython-input-102-78b3d705d411>", line 6, in <module>
predict_price1 = arma_mod1.predict(start_pred, end_pred, exog=True, dynamic=True)
File "/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/base/wrapper.py", line 92, in wrapper
return data.wrap_output(func(results, *args, **kwargs), how)
File "/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/tsa/arima_model.py", line 1441, in predict
return self.model.predict(self.params, start, end, exog, dynamic)
File "/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/tsa/arima_model.py", line 736, in predict
start, method)
File "/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/tsa/arima_model.py", line 327, in _arma_predict_out_of_sample
exog)
File "/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/tsa/arima_model.py", line 293, in _get_predict_out_of_sample
X = lagmat(np.dot(exog, exparams), p, original='in', trim='both')
File "/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/tsa/tsatools.py", line 328, in lagmat
raise ValueError("maxlag should be < nobs")
ValueError: maxlag should be < nobs
我对 maxlag 的理解是(如果之前没有定义)要观察的滞后数将自动计算为:
maxlag = int(round(12*(nobs/100.)**(1/4.)
但我不明白我可以在哪里更改此计算或设置 maxlag 的数量。
我对 nobs 的理解是时间步数,即我在时间序列中的值。 (在我的例子中是 365)。
所以这意味着我需要 maxlag < 365,对吗?
在哪里可以定义maxlag的数量?
同样的错误出现在这个问题中:ADF test in statsmodels in Python但是我不知道在哪里设置 ARMAX 预测的 maxlag。
感谢帮助
代码:
predict_price1 = arma_mod1.predict(start_pred, end_pred, exog=True, dynamic=True)
print ('Predicted Price (ARMAX): {}' .format(predict_price1))
必须改为:
predict_price1 = arma_mod1.predict(start_pred, end_pred, external_df, dynamic=True)
print ('Predicted Price (ARMAX): {}' .format(predict_price1))
这样就可以了!
我比较了没有 external_df
的值,它们不同,我想这可以看作是一个证据。