示例#1
0
    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_()
示例#2
0
    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)
示例#3
0
    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()
示例#4
0
文件: test_mean.py 项目: esvhd/arch
    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
示例#5
0
文件: test_mean.py 项目: jkr2110/arch
    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()