import numpy as np
from numpy.testing import assert_allclose, assert_raises
from statsmodels.tools.tools import add_constant
from statsmodels.tsa.statespace import sarimax
from statsmodels.tsa.arima.datasets.brockwell_davis_2002 import lake
from statsmodels.tsa.arima.estimators.statespace import statespace
def test_basic():
endog = lake.copy()
exog = np.arange(1, len(endog) + 1) * 1.0
# Test default options (include_constant=True, concentrate_scale=False)
p, res = statespace(endog, exog=exog, order=(1, 0, 0),
include_constant=True, concentrate_scale=False)
mod_ss = sarimax.SARIMAX(endog, exog=add_constant(exog), order=(1, 0, 0))
res_ss = mod_ss.filter(p.params)
assert_allclose(res.statespace_results.llf, res_ss.llf)
# Test include_constant=False
p, res = statespace(endog, exog=exog, order=(1, 0, 0),
include_constant=False, concentrate_scale=False)
mod_ss = sarimax.SARIMAX(endog, exog=exog, order=(1, 0, 0))
res_ss = mod_ss.filter(p.params)
assert_allclose(res.statespace_results.llf, res_ss.llf)
# Test concentrate_scale=True
p, res = statespace(endog, exog=exog, order=(1, 0, 0),
include_constant=True, concentrate_scale=True)
mod_ss = sarimax.SARIMAX(endog, exog=add_constant(exog), order=(1, 0, 0),
concentrate_scale=True)
res_ss = mod_ss.filter(p.params)
assert_allclose(res.statespace_results.llf, res_ss.llf)
def test_start_params():
endog = lake.copy()
# Test for valid use of starting parameters
p, _ = statespace(endog, order=(1, 0, 0), start_params=[0, 0, 1.])
p, _ = statespace(endog, order=(1, 0, 0), start_params=[0, 1., 1.],
enforce_stationarity=False)
p, _ = statespace(endog, order=(0, 0, 1), start_params=[0, 1., 1.],
enforce_invertibility=False)
# Test for invalid use of starting parameters
assert_raises(ValueError, statespace, endog, order=(1, 0, 0),
start_params=[0, 1., 1.])
assert_raises(ValueError, statespace, endog, order=(0, 0, 1),
start_params=[0, 1., 1.])