def test_arx(self): arx = ARX(self.y, self.x, lags=3, hold_back=10, constant=False) params = np.array([0.4, 0.3, 0.2, 1.0, 1.0]) data = arx.simulate(params, self.T, x=self.rng.randn(self.T + 500, 1)) assert isinstance(data, pd.DataFrame) bounds = arx.bounds() for b in bounds: assert_equal(b[0], -np.inf) assert_equal(b[1], np.inf) assert_equal(len(bounds), 4) assert_equal(arx.num_params, 4) assert not arx.constant a, b = arx.constraints() assert_equal(a, np.empty((0, 4))) assert_equal(b, np.empty(0)) res = arx.fit(last_obs=900, disp=DISPLAY) assert res.fit_stop == 900 nobs = 900 - 10 rhs = np.zeros((nobs, 4)) y = self.y lhs = y[10:900] for i in range(10, 900): rhs[i - 10, 0] = y[i - 1] rhs[i - 10, 1] = y[i - 2] rhs[i - 10, 2] = y[i - 3] rhs[:, 3] = self.x[10:900, 0] params = np.linalg.pinv(rhs).dot(lhs) assert_almost_equal(params, res.params[:-1]) assert_equal(arx.hold_back, 10) assert_equal(arx.lags, np.array([[1, 2, 3], [1, 2, 3]])) assert_equal(arx.name, "AR-X") assert_equal(arx.use_rotated, False) assert isinstance(arx.__repr__(), str) arx._repr_html_()
def test_ar(self): ar = ARX(self.y, lags=3) params = np.array([1.0, 0.4, 0.3, 0.2, 1.0]) data = ar.simulate(params, self.T) assert len(data) == self.T assert_equal(self.y, ar.y) bounds = ar.bounds() for b in bounds: assert_equal(b[0], -np.inf) assert_equal(b[1], np.inf) assert_equal(len(bounds), 4) assert_equal(ar.num_params, 4) assert ar.constant a, b = ar.constraints() assert_equal(a, np.empty((0, 4))) assert_equal(b, np.empty(0)) res = ar.fit(disp=DISPLAY) nobs = 1000 - 3 rhs = np.ones((nobs, 4)) y = self.y lhs = y[3:1000] for i in range(3, 1000): rhs[i - 3, 1] = y[i - 1] rhs[i - 3, 2] = y[i - 2] rhs[i - 3, 3] = y[i - 3] params = np.linalg.pinv(rhs).dot(lhs) assert_almost_equal(params, res.params[:-1]) forecasts = res.forecast(horizon=5) direct = pd.DataFrame(index=np.arange(y.shape[0]), columns=['h.' + str(i + 1) for i in range(5)], dtype=np.float64) params = res.params.iloc[:-1] for i in range(2, y.shape[0]): fcast = np.zeros(y.shape[0] + 5) fcast[:y.shape[0]] = y.copy() for h in range(1, 6): reg = np.array([1.0, fcast[i + h - 1], fcast[i + h - 2], fcast[i + h - 3]]) fcast[i + h] = reg.dot(params) direct.iloc[i, :] = fcast[i + 1:i + 6] assert isinstance(forecasts, ARCHModelForecast) # TODO # assert_frame_equal(direct, forecasts) assert_equal(ar.hold_back, None) assert_equal(ar.lags, np.array([[0, 1, 2], [1, 2, 3]])) assert_equal(ar.name, 'AR') assert_equal(ar.use_rotated, False) ar.__repr__() ar._repr_html_() ar = ARX(self.y_df, lags=5) ar.__repr__() ar = ARX(self.y_series, lags=5) ar.__repr__() res = ar.fit(disp=DISPLAY) assert isinstance(res.resid, pd.Series) assert isinstance(res.conditional_volatility, pd.Series) # Smoke bootstrap summ = ar.fit(disp=DISPLAY).summary() assert 'Constant Variance' in str(summ) ar = ARX(self.y, lags=1, volatility=GARCH(), distribution=StudentsT()) res = ar.fit(disp=DISPLAY, update_freq=5, cov_type='mle') res.param_cov sims = res.forecast(horizon=5, method='simulation') assert isinstance(sims.simulations.residual_variances, np.ndarray) assert isinstance(sims.simulations.residuals, np.ndarray) assert isinstance(sims.simulations.values, np.ndarray) assert isinstance(sims.simulations.variances, np.ndarray)
def test_ar(self): ar = ARX(self.y, lags=3) params = np.array([1.0, 0.4, 0.3, 0.2, 1.0]) data = ar.simulate(params, self.T) assert_equal(self.y, ar.y) bounds = ar.bounds() for b in bounds: assert_equal(b[0], -np.inf) assert_equal(b[1], np.inf) assert_equal(len(bounds), 4) assert_equal(ar.num_params, 4) assert_true(ar.constant) a, b = ar.constraints() assert_equal(a, np.empty((0, 4))) assert_equal(b, np.empty(0)) res = ar.fit() nobs = 1000 - 3 rhs = np.ones((nobs, 4)) y = self.y lhs = y[3:1000] for i in range(3, 1000): rhs[i - 3, 1] = y[i - 1] rhs[i - 3, 2] = y[i - 2] rhs[i - 3, 3] = y[i - 3] params = np.linalg.pinv(rhs).dot(lhs) assert_almost_equal(params, res.params[:-1]) forecasts = res.forecast(horizon=5) direct = pd.DataFrame(index=np.arange(y.shape[0]), columns=['h.' + str(i + 1) for i in range(5)], dtype=np.float64) params = res.params.iloc[:-1] for i in range(2, y.shape[0]): fcast = np.zeros(y.shape[0] + 5) fcast[:y.shape[0]] = y.copy() for h in range(1, 6): reg = np.array( [1.0, fcast[i + h - 1], fcast[i + h - 2], fcast[i + h - 3]]) fcast[i + h] = reg.dot(params) direct.iloc[i, :] = fcast[i + 1:i + 6] assert_frame_equal(direct, forecasts) assert_equal(ar.first_obs, 3) assert_equal(ar.last_obs, 1000) assert_equal(ar.hold_back, None) assert_equal(ar.lags, np.array([[0, 1, 2], [1, 2, 3]])) assert_equal(ar.nobs, 997) assert_equal(ar.name, 'AR') assert_equal(ar.use_rotated, False) ar.__repr__() ar._repr_html_() ar = ARX(self.y_df, lags=5) ar.__repr__() ar = ARX(self.y_series, lags=5) ar.__repr__() res = ar.fit() assert_true(isinstance(res.resid, pd.Series)) assert_true(isinstance(res.conditional_volatility, pd.Series)) # Smoke tests summ = ar.fit().summary() ar = ARX(self.y, lags=1, volatility=GARCH(), distribution=StudentsT()) res = ar.fit(update_freq=5, cov_type='mle') res.param_cov res.plot() res.plot(annualize='D') res.plot(annualize='W') res.plot(annualize='M') assert_raises(ValueError, res.plot, annualize='unknown') res.plot(scale=360) res.hedgehog_plot()
def test_ar(self): ar = ARX(self.y, lags=3) params = np.array([1.0, 0.4, 0.3, 0.2, 1.0]) data = ar.simulate(params, self.T) assert len(data) == self.T assert_equal(self.y, ar.y) bounds = ar.bounds() for b in bounds: assert_equal(b[0], -np.inf) assert_equal(b[1], np.inf) assert_equal(len(bounds), 4) assert_equal(ar.num_params, 4) assert ar.constant a, b = ar.constraints() assert_equal(a, np.empty((0, 4))) assert_equal(b, np.empty(0)) res = ar.fit(disp=DISPLAY) nobs = 1000 - 3 rhs = np.ones((nobs, 4)) y = self.y lhs = y[3:1000] for i in range(3, 1000): rhs[i - 3, 1] = y[i - 1] rhs[i - 3, 2] = y[i - 2] rhs[i - 3, 3] = y[i - 3] params = np.linalg.pinv(rhs).dot(lhs) assert_almost_equal(params, res.params[:-1]) forecasts = res.forecast(horizon=5) direct = pd.DataFrame(index=np.arange(y.shape[0]), columns=['h.' + str(i + 1) for i in range(5)], dtype=np.float64) params = res.params.iloc[:-1] for i in range(2, y.shape[0]): fcast = np.zeros(y.shape[0] + 5) fcast[:y.shape[0]] = y.copy() for h in range(1, 6): reg = np.array([1.0, fcast[i + h - 1], fcast[i + h - 2], fcast[i + h - 3]]) fcast[i + h] = reg.dot(params) direct.iloc[i, :] = fcast[i + 1:i + 6] assert isinstance(forecasts, ARCHModelForecast) # TODO # assert_frame_equal(direct, forecasts) assert_equal(ar.hold_back, None) assert_equal(ar.lags, np.array([[0, 1, 2], [1, 2, 3]])) assert_equal(ar.name, 'AR') assert_equal(ar.use_rotated, False) ar.__repr__() ar._repr_html_() ar = ARX(self.y_df, lags=5) ar.__repr__() ar = ARX(self.y_series, lags=5) ar.__repr__() res = ar.fit(disp=DISPLAY) assert isinstance(res.resid, pd.Series) assert isinstance(res.conditional_volatility, pd.Series) # Smoke bootstrap summ = ar.fit(disp=DISPLAY).summary() assert 'Constant Variance' in str(summ) ar = ARX(self.y, lags=1, volatility=GARCH(), distribution=StudentsT()) res = ar.fit(disp=DISPLAY, update_freq=5, cov_type='mle') res.param_cov
def test_ar(self): ar = ARX(self.y, lags=3) params = np.array([1.0, 0.4, 0.3, 0.2, 1.0]) data = ar.simulate(params, self.T) assert_equal(self.y, ar.y) bounds = ar.bounds() for b in bounds: assert_equal(b[0], -np.inf) assert_equal(b[1], np.inf) assert_equal(len(bounds), 4) assert_equal(ar.num_params, 4) assert_true(ar.constant) a, b = ar.constraints() assert_equal(a, np.empty((0, 4))) assert_equal(b, np.empty(0)) res = ar.fit() nobs = 1000 - 3 rhs = np.ones((nobs, 4)) y = self.y lhs = y[3:1000] for i in range(3, 1000): rhs[i - 3, 1] = y[i - 1] rhs[i - 3, 2] = y[i - 2] rhs[i - 3, 3] = y[i - 3] params = np.linalg.pinv(rhs).dot(lhs) assert_almost_equal(params, res.params[:-1]) forecasts = res.forecast(horizon=5) direct = pd.DataFrame(index=np.arange(y.shape[0]), columns=['h.' + str(i + 1) for i in range(5)], dtype=np.float64) params = res.params.iloc[:-1] for i in range(2, y.shape[0]): fcast = np.zeros(y.shape[0] + 5) fcast[:y.shape[0]] = y.copy() for h in range(1, 6): reg = np.array([ 1.0, fcast[i + h - 1], fcast[i + h - 2], fcast[i + h - 3] ]) fcast[i + h] = reg.dot(params) direct.iloc[i, :] = fcast[i + 1:i + 6] assert_frame_equal(direct, forecasts) assert_equal(ar.first_obs, 3) assert_equal(ar.last_obs, 1000) assert_equal(ar.hold_back, None) assert_equal(ar.lags, np.array([[0, 1, 2], [1, 2, 3]])) assert_equal(ar.nobs, 997) assert_equal(ar.name, 'AR') assert_equal(ar.use_rotated, False) ar.__repr__() ar._repr_html_() ar = ARX(self.y_df, lags=5) ar.__repr__() ar = ARX(self.y_series, lags=5) ar.__repr__() res = ar.fit() assert_true(isinstance(res.resid, pd.Series)) assert_true(isinstance(res.conditional_volatility, pd.Series)) # Smoke tests summ = ar.fit().summary() ar = ARX(self.y, lags=1, volatility=GARCH(), distribution=StudentsT()) res = ar.fit(update_freq=5, cov_type='mle') res.param_cov res.plot() res.plot(annualize='D') res.plot(annualize='W') res.plot(annualize='M') assert_raises(ValueError, res.plot, annualize='unknown') res.plot(scale=360) res.hedgehog_plot()