Как исправить проблему 'float NaN to integer' после исправления ошибки forcece_stationarity при использовании sarima в statsmodel - PullRequest
1 голос
/ 04 мая 2019

Я пытался вписать модель саримы в свой временной ряд, но натолкнулся на ошибку «ValueError: Нестационарные параметры авторегрессии, найденные с принудительным установлением истинного значения».

Как рекомендуется здесь: R Arima работает, но Python statsmodels SARIMAX выдает ошибку обратимости и здесь https://github.com/statsmodels/statsmodels/pull/3506 я использовал

start_params = [0, 0, 0, 0, 1]

model = sm.tsa.statespace.SARIMAX(data,order=(5, 1, 1), seasonal_order = (1,0,0,12),enforce_stationarity = True, enforce_invertibility = True)  
results = model.fit(start_params= [0, 0, 0, 0, 1]) 
print(results.summary())

но это приводит к ошибке:

C:\Users\windisch\AppData\Local\Continuum\anaconda3\lib\site-packages\statsmodels\tsa\base\tsa_model.py:171: ValueWarning: No frequency information was provided, so inferred frequency MS will be used.

% freq, ValueWarning)

 C:\Users\windisch\AppData\Local\Continuum\anaconda3\lib\site-packages\statsmodels\tsa\statespace\tools.py:600: RuntimeWarning: invalid value encountered in long_scalars

  y[k-1, i] = (y[k, i] - y[k, k]*y[k, k-i-1]) / (1 - y[k, k]**2)

---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-671-69af3fea1d4b> in <module>()

  9                                    seasonal_order =   (1,0,0,12),enforce_stationarity = True, enforce_invertibility = True)

 10

---> 11 results = model.fit(start_params= [0, 0, 0, 0, 1]) #start_params=[0, 0, 0, 1] start_params= [0, 0, 0, 0, 1]

 12 print(results.summary())

 13



~\AppData\Local\Continuum\anaconda3\lib\site-packages\statsmodels\tsa\statespace\mlemodel.py in fit(self, start_params, transformed, cov_type, cov_kwds, method, maxiter, full_output, disp, callback, return_params, optim_score, optim_complex_step, optim_hessian, flags, **kwargs)

449         # Unconstrain the starting parameters

450         if transformed:

--> 451             start_params = self.untransform_params(np.array(start_params))

452

 453         # Maximum likelihood estimation


~\AppData\Local\Continuum\anaconda3\lib\site-packages\statsmodels\tsa\statespace\sarimax.py in untransform_params(self, constrained)

1430             if self.enforce_stationarity:

1431                 unconstrained[start:end] = (

 -> 1432                     unconstrain_stationary_univariate(constrained[start:end])

1433                 )

1434             else:



~\AppData\Local\Continuum\anaconda3\lib\site-packages\statsmodels\tsa\statespace\tools.py in unconstrain_stationary_univariate(constrained)

598     for k in range(n-1, 0, -1):

599         for i in range(k):

--> 600             y[k-1, i] = (y[k, i] - y[k, k]*y[k, k-i-1]) / (1 - y[k, k]**2)

601     r = y.diagonal()

602     x = r / ((1 - r**2)**0.5)



ValueError: cannot convert float NaN to integer

Первые 10 строк данных выглядят так:

  Auftragsdatum
  2010-02-01    -467.0
  2010-03-01    1180.0
  2010-04-01    -434.0
  2010-05-01     279.0
  2010-06-01    -249.0
  2010-07-01    -247.0
  2010-08-01    -775.0
  2010-09-01    1772.0
  2010-10-01     522.0
  2010-11-01    -642.0
  Name: Anzahl, dtype: float64

Что я могу сделать, чтобы это исправить?

...