def test_empty_coeff(self): process = wold.ARMAParams() assert_equal(process.arcoefs, np.array([])) assert_equal(process.macoefs, np.array([])) process = wold.ARMAParams([1, -0.8]) assert_equal(process.arcoefs, np.array([0.8])) assert_equal(process.macoefs, np.array([])) process = wold.ARMAParams(ma=[1, -0.8]) assert_equal(process.arcoefs, np.array([])) assert_equal(process.macoefs, np.array([-0.8]))
def test_invalid_poly(self): # check that passing invalid parameters to ARMAParams raise as expected good = np.array([1.0, -0.5]) bad = np.array([-0.5]) # smoke check that valid params _dont_ raise wold.ARMAParams(good, good) for other in [good, bad, None]: with pytest.raises(ValueError): wold.ARMAParams(other, bad) with pytest.raises(ValueError): wold.ARMAParams(bad, other)
def test_invalid_shapes_arma(self): # check that passing params with invalid shapes to ARMAParams/VARParams # raises as expected # 1-dimensional case good = np.array([1, .34, -.2]) # Check that correct params dont raise wold.ARMAParams(good, None) wold.ARMAParams(None, good) for bad in [np.array(1), good.reshape(1, 3), good.reshape(3, 1, 1)]: with pytest.raises(ValueError): wold.ARMAParams(good, bad) with pytest.raises(ValueError): wold.ARMAParams(bad, good)
def test_from_coeff(self): ar = [1.8, -0.9] ma = [0.3] process = wold.ARMAParams.from_coeffs(np.array(ar), np.array(ma)) ar.insert(0, -1) ma.insert(0, 1) ar_p = -1 * np.array(ar) ma_p = ma process_direct = wold.ARMAParams(ar_p, ma_p) assert_equal(process.arcoefs, process_direct.arcoefs) assert_equal(process.macoefs, process_direct.macoefs) # assert_equal(process.nobs, process_direct.nobs) # nobs from upstream deprecated assert_equal(process.maroots, process_direct.maroots) assert_equal(process.arroots, process_direct.arroots) assert_equal(process.isinvertible, process_direct.isinvertible) assert_equal(process.isstationary, process_direct.isstationary)
def test_from_model(self): from sm2.tsa.arima_model import ARMA process = wold.ARMAParams([1, -.8], [1, .3], 1000) t = 1000 rs = np.random.RandomState(12345) y = process.generate_sample(t, burnin=100, distrvs=rs.standard_normal) res = ARMA(y, (2, 2)).fit(disp=False) # upstream uses (1, 1), but we use (2, 2) to smoke-test # a few lines in ARMATransparams process_model = wold.ARMAParams.from_estimation(res) process_coef = wold.ARMAParams.from_coeffs(res.arparams, res.maparams) # Note: upstream also passes `t` to from_coeffs above assert_equal(process_model.arcoefs, process_coef.arcoefs) assert_equal(process_model.macoefs, process_coef.macoefs) # assert_equal(process_model.nobs, process_coef.nobs) # nobs from upstream deprecated assert_equal(process_model.isinvertible, process_coef.isinvertible) assert_equal(process_model.isstationary, process_coef.isstationary)
def setup_class(cls): # Basic AR(1) cls.ar = [1, -0.5] cls.ma = [1] cls.arma = wold.ARMAParams(cls.ar, cls.ma)
def test_periodogram(self): process = wold.ARMAParams() pg = process.periodogram() assert_almost_equal(pg[0], np.linspace(0, np.pi, 100, False)) assert_almost_equal(pg[1], np.sqrt(2 / np.pi) / 2 * np.ones(100))