简体   繁体   中英

Time Series in Python 3.5 - Fitting ARMA model

I am trying to fit and ARMA model in my IPython Notebook. For the following code:

from statsmodels.tsa.arima_model import ARMA
arma_mod20 = sm.tsa.ARMA(dta, (2,0)).fit()
print (arma_mod20.params)

I am getting the following error:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-43-8c1d7770f953> in <module>()
  1 from statsmodels.tsa.arima_model import ARMA
----> 2 arma_mod20 = sm.tsa.ARMA(dta, (2,0)).fit()
  3 print (arma_mod20.params)

C:\Users\rajadm\Desktop\Anaconda3\lib\site-packages\statsmodels\tsa\arima_model.py in fit(self, start_params, trend, method, transparams, solver, maxiter, full_output, disp, callback, **kwargs)
917 
918         else:  # estimate starting parameters
--> 919             start_params = self._fit_start_params((k_ar, k_ma, k), method)
920 
921         if transparams:  # transform initial parameters to ensure invertibility

C:\Users\rajadm\Desktop\Anaconda3\lib\site-packages\statsmodels\tsa\arima_model.py in _fit_start_params(self, order, method)
554             func = lambda params: -self.loglike_css(params)
555             #start_params = [.1]*(k_ar+k_ma+k_exog) # different one for k?
--> 556             start_params = self._fit_start_params_hr(order)
557             if self.transparams:
558                 start_params = self._invtransparams(start_params)

C:\Users\rajadm\Desktop\Anaconda3\lib\site-packages\statsmodels\tsa\arima_model.py in _fit_start_params_hr(self, order)
490         if k != 0:
491             ols_params = GLS(endog, exog).fit().params
--> 492             start_params[:k] = ols_params
493             endog -= np.dot(exog, ols_params).squeeze()
494         if q != 0:

ValueError: could not broadcast input array from shape (2) into shape (1)

Any suggested fixes?

Thanks

Looks like you need to adjust the input format. This works:

import statsmodels as sm
from statsmodels.tsa.arima_model import ARMA
from datetime import date

dta = sm.datasets.sunspots.load_pandas().data
dta.index = pd.date_range(start=date(1700,12, 31), end=date(2008,12,31), freq='A')
dta = dta.drop('YEAR', axis=1)

dta.info()

DatetimeIndex: 309 entries, 1700-12-31 to 2008-12-31
Freq: A-DEC
Data columns (total 1 columns):
SUNACTIVITY    309 non-null float64
dtypes: float64(1)
memory usage: 4.8 KB


arma_mod20 = ARMA(dta, (2, 0)).fit()
arma_mod20.params

const                49.659542
ar.L1.SUNACTIVITY     1.390656
ar.L2.SUNACTIVITY    -0.688571
dtype: float64

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM