2016-04-19 49 views
1

我试图预测数组的outofsample值。 Python代码:预测statsmodel参数错误

import pandas as pd 
import numpy as np 
from statsmodels.tsa.arima_model import ARIMA 

    dates = pd.date_range('2012-07-09','2012-07-30') 
    series = [43.,32.,63.,98.,65.,78.,23.,35.,78.,56.,45.,45.,56.,6.,63.,45.,64.,34.,76.,34.,14.,54.] 
    res = pd.Series(series, index=dates) 
    r = ARIMA(res,(1,2,0)) 
    pred = r.predict(start='2012-07-31', end='2012-08-31') 

我得到这个error.I看,我已经给出了两个说法,但编译回报,我已经给3

Traceback (most recent call last): 
    File "XXXXXXXXX/testfile.py", line 12, in <module> 
    pred = r.predict(start='2012-07-31', end='2012-08-31') 
TypeError: predict() takes at least 2 arguments (3 given) 

请帮

+0

的错误消息是奇怪的 - 显然'3'是*至少'2' *,所以它没有很大的意义。你是积极的,这是你收到的确切消息? –

+0

是的,我确定。我已更新完整的错误 – jokeroor

回答

4

ARIMA.predict的调用签名是

predict(self, params, start=None, end=None, exog=None, dynamic=False) 

因此,当您拨打r.predict(start='2012-07-31', end='2012-08-31'),self被绑定到r,并且值被绑定到startend,但是所需的位置标记params未被绑定。这就是为什么你得到错误的原因

TypeError: predict() takes at least 2 arguments (3 given) 

不幸的是,错误消息是误导。 “给定3”是指r,startend。 “2个参数”是指两个必需的参数,即selfparams。 问题是需要位置参数params没有给出。

要解决该问题,您需要参数。通常你通过拟合发现这些参数:

r = r.fit() 

调用

pred = r.predict(start='2012-07-31', end='2012-08-31') 

r.fit()返回statsmodels.tsa.arima_model.ARIMAResultsWrapper其 有这么调用ARIMAResultWrapper.fit不需要经过params“的出炉”的参数之前。


import pandas as pd 
import numpy as np 
from statsmodels.tsa.arima_model import ARIMA 

dates = pd.date_range('2012-07-09','2012-07-30') 
series = [43.,32.,63.,98.,65.,78.,23.,35.,78.,56.,45.,45.,56.,6.,63.,45.,64.,34.,76.,34.,14.,54.] 
res = pd.Series(series, index=dates) 
r = ARIMA(res,(1,2,0)) 
r = r.fit() 
pred = r.predict(start='2012-07-31', end='2012-08-31') 
print(pred) 

产量

2012-07-31 -39.067222 
2012-08-01 26.902571 
2012-08-02 -17.027333 
... 
2012-08-29  0.532946 
2012-08-30  0.532447 
2012-08-31  0.532780 
Freq: D, dtype: float64 
+0

非常感谢 – jokeroor