Ejemplo n.º 1
0
    def test_ar_plot(self):
        ar = ARX(self.y, lags=1, volatility=GARCH(), distribution=StudentsT())
        res = ar.fit(disp=DISPLAY, update_freq=5, cov_type='mle')
        res.plot()
        res.plot(annualize='D')
        res.plot(annualize='W')
        res.plot(annualize='M')
        with pytest.raises(ValueError):
            res.plot(annualize='unknown')

        res.plot(scale=360)
        res.hedgehog_plot(start=500)
        res.hedgehog_plot(start=500, type='mean')
        res.hedgehog_plot(type='volatility')
        res.hedgehog_plot(start=500, method='simulation', simulations=100)
Ejemplo n.º 2
0
    def test_warnings(self):
        with warnings.catch_warnings(record=True) as w:
            ARX(self.y, lags=[1, 2, 3, 12], hold_back=5)
            assert_equal(len(w), 1)

        with warnings.catch_warnings(record=True) as w:
            HARX(self.y, lags=[[1, 1, 1], [2, 5, 22]], use_rotated=True)
            assert_equal(len(w), 1)
Ejemplo n.º 3
0
    def test_errors(self):
        assert_raises(ValueError, ARX, self.y, lags=np.array([[1, 2], [3, 4]]))
        x = randn(self.y.shape[0] + 1, 1)
        assert_raises(ValueError, ARX, self.y, x=x)
        assert_raises(ValueError, HARX, self.y, lags=np.eye(3))
        assert_raises(ValueError, ARX, self.y, lags=-1)
        assert_raises(ValueError, ARX, self.y, x=randn(1, 1), lags=-1)

        ar = ARX(self.y, lags=1)
        with self.assertRaises(ValueError):
            d = Normal()
            ar.volatility = d

        with self.assertRaises(ValueError):
            v = GARCH()
            ar.distribution = v
        x = randn(1000, 1)
        assert_raises(ValueError, ar.simulate, np.ones(5), 100, x=x)
        assert_raises(ValueError, ar.simulate, np.ones(5), 100)
        assert_raises(ValueError,
                      ar.simulate,
                      np.ones(3),
                      100,
                      initial_value=randn(10))

        with self.assertRaises(ValueError):
            ar.volatility = ConstantVariance()
            ar.fit(cov_type='unknown')
Ejemplo n.º 4
0
    def test_constant_mean_fixed_variance(self):
        variance = 2 + self.rng.standard_normal(self.y.shape[0]) ** 2.0
        mod = ConstantMean(self.y_series, volatility=FixedVariance(variance))
        res = mod.fit()
        print(res.summary())
        assert len(res.params) == 2
        assert 'scale' in res.params.index

        mod = ARX(self.y_series, lags=[1, 2, 3], volatility=FixedVariance(variance))
        res = mod.fit()
        assert len(res.params) == 5
        assert 'scale' in res.params.index

        mod = ARX(self.y_series, lags=[1, 2, 3],
                  volatility=FixedVariance(variance, unit_scale=True))
        res = mod.fit()
        assert len(res.params) == 4
        assert 'scale' not in res.params.index
Ejemplo n.º 5
0
    def test_no_param_volatility(self):
        cm = ConstantMean(self.y)
        cm.volatility = EWMAVariance()
        cm.fit(update_freq=0)
        cm.volatility = RiskMetrics2006()
        cm.fit(update_freq=0)

        ar = ARX(self.y, lags=5)
        ar.volatility = EWMAVariance()
        ar.fit(update_freq=0)
        ar.volatility = RiskMetrics2006()
        ar.fit(update_freq=0)
Ejemplo n.º 6
0
    def test_errors(self):
        assert_raises(ValueError, ARX, self.y, lags=np.array([[1, 2], [3, 4]]))
        x = randn(self.y.shape[0] + 1, 1)
        assert_raises(ValueError, ARX, self.y, x=x)
        assert_raises(ValueError, HARX, self.y, lags=np.eye(3))
        assert_raises(ValueError, ARX, self.y, lags=-1)
        assert_raises(ValueError, ARX, self.y, x=randn(1, 1), lags=-1)

        ar = ARX(self.y, lags=1)
        with self.assertRaises(ValueError):
            d = Normal()
            ar.volatility = d

        with self.assertRaises(ValueError):
            v = GARCH()
            ar.distribution = v
        x = randn(1000, 1)
        assert_raises(ValueError, ar.simulate, np.ones(5), 100, x=x)
        assert_raises(ValueError, ar.simulate, np.ones(5), 100)
        assert_raises(ValueError, ar.simulate, np.ones(3), 100,
                      initial_value=randn(10))

        with self.assertRaises(ValueError):
            ar.volatility = ConstantVariance()
            ar.fit(cov_type='unknown')
Ejemplo n.º 7
0
    def test_ar_plot(self):
        ar = ARX(self.y, lags=1, volatility=GARCH(), distribution=StudentsT())
        res = ar.fit(disp=DISPLAY, update_freq=5, cov_type="mle")
        res.plot()
        res.plot(annualize="D")
        res.plot(annualize="W")
        res.plot(annualize="M")
        with pytest.raises(ValueError):
            res.plot(annualize="unknown")

        import matplotlib.pyplot as plt

        plt.close("all")

        res.plot(scale=360)
        res.hedgehog_plot(start=500)
        res.hedgehog_plot(start=500, plot_type="mean")
        res.hedgehog_plot(plot_type="volatility")
        res.hedgehog_plot(start=500, method="simulation", simulations=100)
        res.hedgehog_plot(plot_type="volatility", method="bootstrap")

        plt.close("all")
Ejemplo n.º 8
0
    def test_no_param_volatility(self):
        cm = ConstantMean(self.y)
        cm.volatility = EWMAVariance()
        cm.fit(update_freq=0, disp=DISPLAY)
        cm.volatility = RiskMetrics2006()
        cm.fit(update_freq=0, disp=DISPLAY)

        ar = ARX(self.y, lags=5)
        ar.volatility = EWMAVariance()
        ar.fit(update_freq=0, disp=DISPLAY)
        ar.volatility = RiskMetrics2006()
        ar.fit(update_freq=0, disp=DISPLAY)
        assert 'tau0' in str(ar.volatility)
        assert 'tau1' in str(ar.volatility)
        assert 'kmax' in str(ar.volatility)
Ejemplo n.º 9
0
    def test_no_param_volatility(self):
        cm = ConstantMean(self.y)
        cm.volatility = EWMAVariance()
        cm.fit(update_freq=0)
        cm.volatility = RiskMetrics2006()
        cm.fit(update_freq=0)

        ar = ARX(self.y, lags=5)
        ar.volatility = EWMAVariance()
        ar.fit(update_freq=0)
        ar.volatility = RiskMetrics2006()
        ar.fit(update_freq=0)
Ejemplo n.º 10
0
    def test_har_lag_specifications(self):
        """ Test equivalence of alternative lag specifications"""
        har = HARX(self.y, lags=[1, 2, 3])
        har_r = HARX(self.y, lags=[1, 2, 3], use_rotated=True)
        har_r_v2 = HARX(self.y, lags=3, use_rotated=True)
        ar = ARX(self.y, lags=[1, 2, 3])
        ar_v2 = ARX(self.y, lags=3)

        res_har = har.fit(disp=DISPLAY)
        res_har_r = har_r.fit(disp=DISPLAY)
        res_har_r_v2 = har_r_v2.fit(disp=DISPLAY)
        res_ar = ar.fit(disp=DISPLAY)
        res_ar_v2 = ar_v2.fit(disp=DISPLAY)
        assert_almost_equal(res_har.rsquared, res_har_r.rsquared)
        assert_almost_equal(res_har_r_v2.rsquared, res_har_r.rsquared)
        assert_almost_equal(np.asarray(res_ar.params),
                            np.asarray(res_ar_v2.params))
        assert_almost_equal(np.asarray(res_ar.params),
                            np.asarray(res_har_r_v2.params))
        assert_almost_equal(np.asarray(res_ar.param_cov),
                            np.asarray(res_har_r_v2.param_cov))
        assert_almost_equal(res_ar.conditional_volatility,
                            res_har_r_v2.conditional_volatility)
        assert_almost_equal(res_ar.resid, res_har_r_v2.resid)
Ejemplo n.º 11
0
    def test_no_param_volatility(self):
        cm = ConstantMean(self.y)
        cm.volatility = EWMAVariance()
        cm.fit(update_freq=0, disp=DISPLAY)
        cm.volatility = RiskMetrics2006()
        cm.fit(update_freq=0, disp=DISPLAY)

        ar = ARX(self.y, lags=5)
        ar.volatility = EWMAVariance()
        ar.fit(update_freq=0, disp=DISPLAY)
        ar.volatility = RiskMetrics2006()
        ar.fit(update_freq=0, disp=DISPLAY)
        assert 'tau0' in str(ar.volatility)
        assert 'tau1' in str(ar.volatility)
        assert 'kmax' in str(ar.volatility)
Ejemplo n.º 12
0
    def test_arx(self):
        arx = ARX(self.y,
                  self.x,
                  lags=3,
                  hold_back=10,
                  last_obs=900,
                  constant=False)
        params = np.array([0.4, 0.3, 0.2, 1.0, 1.0])
        data = arx.simulate(params, self.T, x=randn(self.T + 500, 1))
        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_true(not arx.constant)
        a, b = arx.constraints()
        assert_equal(a, np.empty((0, 4)))
        assert_equal(b, np.empty(0))
        res = arx.fit()

        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_raises(RuntimeError, res.forecast)
        assert_equal(arx.first_obs, 10)
        assert_equal(arx.last_obs, 900)
        assert_equal(arx.hold_back, 10)
        assert_equal(arx.lags, np.array([[0, 1, 2], [1, 2, 3]]))
        assert_equal(arx.nobs, 890)
        assert_equal(arx.name, 'AR-X')
        assert_equal(arx.use_rotated, False)
        arx
        arx._repr_html_()
Ejemplo n.º 13
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_()
Ejemplo n.º 14
0
    def test_arx(self):
        arx = ARX(self.y, self.x, lags=3, hold_back=10, last_obs=900,
                  constant=False)
        params = np.array([0.4, 0.3, 0.2, 1.0, 1.0])
        data = arx.simulate(params, self.T, x=randn(self.T + 500, 1))
        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_true(not arx.constant)
        a, b = arx.constraints()
        assert_equal(a, np.empty((0, 4)))
        assert_equal(b, np.empty(0))
        res = arx.fit()

        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_raises(RuntimeError, res.forecast)
        assert_equal(arx.first_obs, 10)
        assert_equal(arx.last_obs, 900)
        assert_equal(arx.hold_back, 10)
        assert_equal(arx.lags, np.array([[0, 1, 2], [1, 2, 3]]))
        assert_equal(arx.nobs, 890)
        assert_equal(arx.name, 'AR-X')
        assert_equal(arx.use_rotated, False)
        arx
        arx._repr_html_()
Ejemplo n.º 15
0
    def test_har_lag_specifications(self):
        """ Test equivalence of alternative lag specifications"""
        har = HARX(self.y, lags=[1, 2, 3])
        har_r = HARX(self.y, lags=[1, 2, 3], use_rotated=True)
        har_r_v2 = HARX(self.y, lags=3, use_rotated=True)
        ar = ARX(self.y, lags=[1, 2, 3])
        ar_v2 = ARX(self.y, lags=3)

        res_har = har.fit(disp=DISPLAY)
        res_har_r = har_r.fit(disp=DISPLAY)
        res_har_r_v2 = har_r_v2.fit(disp=DISPLAY)
        res_ar = ar.fit(disp=DISPLAY)
        res_ar_v2 = ar_v2.fit(disp=DISPLAY)
        assert_almost_equal(res_har.rsquared, res_har_r.rsquared)
        assert_almost_equal(res_har_r_v2.rsquared, res_har_r.rsquared)
        assert_almost_equal(np.asarray(res_ar.params),
                            np.asarray(res_ar_v2.params))
        assert_almost_equal(np.asarray(res_ar.params),
                            np.asarray(res_har_r_v2.params))
        assert_almost_equal(np.asarray(res_ar.param_cov),
                            np.asarray(res_har_r_v2.param_cov))
        assert_almost_equal(res_ar.conditional_volatility,
                            res_har_r_v2.conditional_volatility)
        assert_almost_equal(res_ar.resid, res_har_r_v2.resid)
Ejemplo n.º 16
0
    def test_arch_arx(self):
        self.rng.seed(12345)
        x = self.rng.randn(500, 3)
        y = x.sum(1) + 3 * self.rng.randn(500)

        am = ARX(y=y, x=x)
        am.fit(disp=DISPLAY).summary()
        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp='off')
        assert isinstance(results.pvalues, pd.Series)
        assert_equal(list(results.pvalues.index),
                     ['Const', 'x0', 'x1', 'x2',
                      'omega', 'alpha[1]', 'alpha[2]'])

        am = ARX(y=y, lags=2, x=x)
        res = am.fit(disp=DISPLAY)
        summ = res.summary().as_text()
        repr = res.__repr__()
        assert str(hex(id(res))) in repr
        assert summ[:10] == repr[:10]

        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp='off')
        assert isinstance(results.pvalues, pd.Series)
        assert_equal(list(results.pvalues.index),
                     ['Const', 'y[1]', 'y[2]', 'x0', 'x1', 'x2',
                      'omega', 'alpha[1]', 'alpha[2]'])

        x = pd.DataFrame(x, columns=['x0', 'x1', 'x2'])
        y = pd.Series(y, name='y')
        am = ARX(y=y, x=x)
        am.fit(disp=DISPLAY).summary()
        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp='off')
        assert isinstance(results.pvalues, pd.Series)
        assert_equal(list(results.pvalues.index),
                     ['Const', 'x0', 'x1', 'x2',
                      'omega', 'alpha[1]', 'alpha[2]'])
Ejemplo n.º 17
0
 def test_ar_no_lags(self):
     ar = ARX(self.y, lags=0)
     assert ar.lags is None
     res = ar.fit()
     assert_almost_equal(res.params[0], self.y.mean())
     assert 'lags: none' in ar.__str__()
Ejemplo n.º 18
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)
Ejemplo n.º 19
0
    def test_errors(self):
        with pytest.raises(ValueError):
            ARX(self.y, lags=np.array([[1, 2], [3, 4]]))
        x = self.rng.randn(self.y.shape[0] + 1, 1)
        with pytest.raises(ValueError):
            ARX(self.y, x=x)
        with pytest.raises(ValueError):
            HARX(self.y, lags=np.eye(3))
        with pytest.raises(ValueError):
            ARX(self.y, lags=-1)
        with pytest.raises(ValueError):
            ARX(self.y, x=self.rng.randn(1, 1), lags=-1)

        ar = ARX(self.y, lags=1)
        with pytest.raises(ValueError):
            d = Normal()
            ar.volatility = d

        with pytest.raises(ValueError):
            v = GARCH()
            ar.distribution = v
        x = self.rng.randn(1000, 1)
        with pytest.raises(ValueError):
            ar.simulate(np.ones(5), 100, x=x)
        with pytest.raises(ValueError):
            ar.simulate(np.ones(5), 100)
        with pytest.raises(ValueError):
            ar.simulate(np.ones(3), 100, initial_value=self.rng.standard_normal(10))

        with pytest.raises(ValueError):
            ar.volatility = ConstantVariance()
            ar.fit(cov_type="unknown")
Ejemplo n.º 20
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
Ejemplo n.º 21
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()
Ejemplo n.º 22
0
    def test_first_last_obs(self):
        ar = ARX(self.y, lags=5, hold_back=100)
        res = ar.fit(update_freq=0, disp=DISPLAY)
        resids = res.resid
        resid_copy = resids.copy()
        resid_copy[:100] = np.nan
        assert_equal(resids, resid_copy)

        ar.volatility = GARCH()
        res = ar.fit(update_freq=0, disp=DISPLAY)
        resids = res.resid
        resid_copy = resids.copy()
        resid_copy[:100] = np.nan
        assert_equal(resids, resid_copy)

        ar = ARX(self.y, lags=5)
        ar.volatility = GARCH()
        res = ar.fit(update_freq=0, last_obs=500, disp=DISPLAY)
        resids = res.resid
        resid_copy = resids.copy()
        resid_copy[500:] = np.nan
        assert_equal(resids, resid_copy)

        ar = ARX(self.y, lags=5, hold_back=100)
        ar.volatility = GARCH()
        res = ar.fit(update_freq=0, last_obs=500, disp=DISPLAY)
        resids = res.resid
        resid_copy = resids.copy()
        resid_copy[:100] = np.nan
        resid_copy[500:] = np.nan
        assert_equal(resids, resid_copy)

        vol = res.conditional_volatility
        vol_copy = vol.copy()
        vol_copy[:100] = np.nan
        vol_copy[500:] = np.nan
        assert_equal(vol, vol_copy)
        assert_equal(self.y.shape[0], vol.shape[0])

        ar = ARX(self.y, lags=5)
        ar.volatility = GARCH()
        res = ar.fit(update_freq=0, last_obs=500, disp=DISPLAY)
        resids = res.resid
        resid_copy = resids.copy()
        resid_copy[:5] = np.nan
        resid_copy[500:] = np.nan
        assert_equal(resids, resid_copy)
Ejemplo n.º 23
0
    def test_arch_arx(self):
        np.random.seed(12345)
        x = np.random.randn(500, 3)
        y = x.sum(1) + 3 * np.random.randn(500)

        am = ARX(y=y, x=x)
        am.fit(disp=DISPLAY).summary()
        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp='off')
        assert isinstance(results.pvalues, pd.Series), True
        assert_equal(list(results.pvalues.index),
                     ['Const', 'x0', 'x1', 'x2',
                      'omega', 'alpha[1]', 'alpha[2]'])

        am = ARX(y=y, lags=2, x=x)
        res = am.fit(disp=DISPLAY)
        summ = res.summary().as_text()
        repr = res.__repr__()
        assert str(hex(id(res))) in repr
        assert summ[:10] == repr[:10]

        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp='off')
        assert isinstance(results.pvalues, pd.Series)
        assert_equal(list(results.pvalues.index),
                     ['Const', 'y[1]', 'y[2]', 'x0', 'x1', 'x2',
                      'omega', 'alpha[1]', 'alpha[2]'])

        x = pd.DataFrame(x, columns=['x0', 'x1', 'x2'])
        y = pd.Series(y, name='y')
        am = ARX(y=y, x=x)
        am.fit(disp=DISPLAY).summary()
        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp='off')
        assert isinstance(results.pvalues, pd.Series)
        assert_equal(list(results.pvalues.index),
                     ['Const', 'x0', 'x1', 'x2',
                      'omega', 'alpha[1]', 'alpha[2]'])
Ejemplo n.º 24
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()
Ejemplo n.º 25
0
    def test_first_last_obs(self):
        ar = ARX(self.y, lags=5, hold_back=100)
        res = ar.fit(update_freq=0, disp=DISPLAY)
        resids = res.resid
        resid_copy = resids.copy()
        resid_copy[:100] = np.nan
        assert_equal(resids, resid_copy)

        ar.volatility = GARCH()
        res = ar.fit(update_freq=0, disp=DISPLAY)
        resids = res.resid
        resid_copy = resids.copy()
        resid_copy[:100] = np.nan
        assert_equal(resids, resid_copy)

        ar = ARX(self.y, lags=5)
        ar.volatility = GARCH()
        res = ar.fit(update_freq=0, last_obs=500, disp=DISPLAY)
        resids = res.resid
        resid_copy = resids.copy()
        resid_copy[500:] = np.nan
        assert_equal(resids, resid_copy)

        ar = ARX(self.y, lags=5, hold_back=100)
        ar.volatility = GARCH()
        res = ar.fit(update_freq=0, last_obs=500, disp=DISPLAY)
        resids = res.resid
        resid_copy = resids.copy()
        resid_copy[:100] = np.nan
        resid_copy[500:] = np.nan
        assert_equal(resids, resid_copy)

        vol = res.conditional_volatility
        vol_copy = vol.copy()
        vol_copy[:100] = np.nan
        vol_copy[500:] = np.nan
        assert_equal(vol, vol_copy)
        assert_equal(self.y.shape[0], vol.shape[0])

        ar = ARX(self.y, lags=5)
        ar.volatility = GARCH()
        res = ar.fit(update_freq=0, last_obs=500, disp=DISPLAY)
        resids = res.resid
        resid_copy = resids.copy()
        resid_copy[:5] = np.nan
        resid_copy[500:] = np.nan
        assert_equal(resids, resid_copy)
Ejemplo n.º 26
0
    def test_arch_arx(self):
        self.rng.seed(12345)
        x = self.rng.randn(500, 3)
        y = x.sum(1) + 3 * self.rng.standard_normal(500)

        am = ARX(y=y, x=x)
        res = am.fit(disp=DISPLAY)
        res.summary()
        assert isinstance(res.optimization_result, OptimizeResult)
        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp=DISPLAY)
        assert isinstance(results.pvalues, pd.Series)
        assert_equal(
            list(results.pvalues.index),
            ["Const", "x0", "x1", "x2", "omega", "alpha[1]", "alpha[2]"],
        )

        am = ARX(y=y, lags=2, x=x)
        res = am.fit(disp=DISPLAY)
        summ = res.summary().as_text()
        res_repr = res.__repr__()
        assert str(hex(id(res))) in res_repr
        assert summ[:10] == res_repr[:10]

        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp=DISPLAY)
        assert isinstance(results.pvalues, pd.Series)
        assert_equal(
            list(results.pvalues.index),
            [
                "Const",
                "y[1]",
                "y[2]",
                "x0",
                "x1",
                "x2",
                "omega",
                "alpha[1]",
                "alpha[2]",
            ],
        )

        x = pd.DataFrame(x, columns=["x0", "x1", "x2"])
        y = pd.Series(y, name="y")
        am = ARX(y=y, x=x)
        am.fit(disp=DISPLAY).summary()
        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp=DISPLAY)
        assert isinstance(results.pvalues, pd.Series)
        assert_equal(
            list(results.pvalues.index),
            ["Const", "x0", "x1", "x2", "omega", "alpha[1]", "alpha[2]"],
        )
Ejemplo n.º 27
0
    def test_arch_arx(self):
        np.random.seed(12345)
        x = np.random.randn(500, 3)
        y = x.sum(1) + 3 * np.random.randn(500)

        am = ARX(y=y, x=x)
        am.fit().summary()
        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp='off')
        assert_true(isinstance(results.pvalues, pd.Series), True)
        assert_equal(list(results.pvalues.index),
                     ['Const', 'x0', 'x1', 'x2',
                      'omega', 'alpha[1]', 'alpha[2]'])

        am = ARX(y=y, lags=2, x=x)
        am.fit().summary()
        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp='off')
        assert_true(isinstance(results.pvalues, pd.Series), True)
        assert_equal(list(results.pvalues.index),
                     ['Const', 'y[1]', 'y[2]', 'x0', 'x1', 'x2',
                      'omega', 'alpha[1]', 'alpha[2]'])

        x = pd.DataFrame(x, columns=['x0', 'x1', 'x2'])
        y = pd.Series(y, name='y')
        am = ARX(y=y, x=x)
        am.fit().summary()
        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp='off')
        assert_true(isinstance(results.pvalues, pd.Series), True)
        assert_equal(list(results.pvalues.index),
                     ['Const', 'x0', 'x1', 'x2',
                      'omega', 'alpha[1]', 'alpha[2]'])
Ejemplo n.º 28
0
    def test_arch_arx(self):
        np.random.seed(12345)
        x = np.random.randn(500, 3)
        y = x.sum(1) + 3 * np.random.randn(500)

        am = ARX(y=y, x=x)
        am.fit(disp=DISPLAY).summary()
        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp='off')
        assert isinstance(results.pvalues, pd.Series), True
        assert_equal(list(results.pvalues.index),
                     ['Const', 'x0', 'x1', 'x2',
                      'omega', 'alpha[1]', 'alpha[2]'])

        am = ARX(y=y, lags=2, x=x)
        am.fit(disp=DISPLAY).summary()
        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp='off')
        assert isinstance(results.pvalues, pd.Series)
        assert_equal(list(results.pvalues.index),
                     ['Const', 'y[1]', 'y[2]', 'x0', 'x1', 'x2',
                      'omega', 'alpha[1]', 'alpha[2]'])

        x = pd.DataFrame(x, columns=['x0', 'x1', 'x2'])
        y = pd.Series(y, name='y')
        am = ARX(y=y, x=x)
        am.fit(disp=DISPLAY).summary()
        am.volatility = ARCH(p=2)
        results = am.fit(update_freq=0, disp='off')
        assert isinstance(results.pvalues, pd.Series)
        assert_equal(list(results.pvalues.index),
                     ['Const', 'x0', 'x1', 'x2',
                      'omega', 'alpha[1]', 'alpha[2]'])