def test_egarch_100(self): egarch = EGARCH(p=1, o=0, q=0) sv = egarch.starting_values(self.resids) assert_equal(sv.shape[0], egarch.num_params) backcast = egarch.backcast(self.resids) w = 0.94 ** np.arange(75) backcast_test = np.sum((self.resids[:75] ** 2) * (w / w.sum())) assert_almost_equal(backcast, np.log(backcast_test)) var_bounds = egarch.variance_bounds(self.resids) parameters = np.array([.1, .4]) egarch.compute_variance(parameters, self.resids, self.sigma2, backcast, var_bounds) cond_var_direct = np.zeros_like(self.sigma2) lnsigma2 = np.empty(self.T) std_resids = np.empty(self.T) abs_std_resids = np.empty(self.T) rec.egarch_recursion(parameters, self.resids, cond_var_direct, 1, 0, 0, self.T, backcast, var_bounds, lnsigma2, std_resids, abs_std_resids) assert_allclose(self.sigma2, cond_var_direct) state = self.rng.get_state() rng = Normal() rng.random_state.set_state(state) sim_data = egarch.simulate(parameters, self.T, rng.simulate([])) self.rng.set_state(state) e = self.rng.standard_normal(self.T + 500) initial_value = 0.1 / (1 - 0.95) lnsigma2 = np.zeros(self.T + 500) lnsigma2[0] = initial_value sigma2 = np.zeros(self.T + 500) sigma2[0] = np.exp(lnsigma2[0]) data = np.zeros(self.T + 500) data[0] = np.sqrt(sigma2[0]) * e[0] norm_const = np.sqrt(2 / np.pi) for t in range(1, self.T + 500): lnsigma2[t] = parameters[0] lnsigma2[t] += parameters[1] * (np.abs(e[t - 1]) - norm_const) sigma2 = np.exp(lnsigma2) data = e * np.sqrt(sigma2) data = data[500:] sigma2 = sigma2[500:] assert_almost_equal(data - sim_data[0] + 1.0, np.ones_like(data)) assert_almost_equal(sigma2 / sim_data[1], np.ones_like(sigma2))
def test_egarch_100(self): egarch = EGARCH(p=1, o=0, q=0) sv = egarch.starting_values(self.resids) assert_equal(sv.shape[0], egarch.num_params) backcast = egarch.backcast(self.resids) w = 0.94 ** np.arange(75) backcast_test = np.sum((self.resids[:75] ** 2) * (w / w.sum())) assert_almost_equal(backcast, np.log(backcast_test)) var_bounds = egarch.variance_bounds(self.resids) parameters = np.array([.1, .4]) egarch.compute_variance(parameters, self.resids, self.sigma2, backcast, var_bounds) cond_var_direct = np.zeros_like(self.sigma2) lnsigma2 = np.empty(self.T) std_resids = np.empty(self.T) abs_std_resids = np.empty(self.T) rec.egarch_recursion(parameters, self.resids, cond_var_direct, 1, 0, 0, self.T, backcast, var_bounds, lnsigma2, std_resids, abs_std_resids) assert_allclose(self.sigma2, cond_var_direct) state = np.random.get_state() rng = Normal() sim_data = egarch.simulate(parameters, self.T, rng.simulate([])) np.random.set_state(state) e = np.random.standard_normal(self.T + 500) initial_value = 0.1 / (1 - 0.95) lnsigma2 = np.zeros(self.T + 500) lnsigma2[0] = initial_value sigma2 = np.zeros(self.T + 500) sigma2[0] = np.exp(lnsigma2[0]) data = np.zeros(self.T + 500) data[0] = np.sqrt(sigma2[0]) * e[0] norm_const = np.sqrt(2 / np.pi) for t in range(1, self.T + 500): lnsigma2[t] = parameters[0] lnsigma2[t] += parameters[1] * (np.abs(e[t - 1]) - norm_const) sigma2 = np.exp(lnsigma2) data = e * np.sqrt(sigma2) data = data[500:] sigma2 = sigma2[500:] assert_almost_equal(data - sim_data[0] + 1.0, np.ones_like(data)) assert_almost_equal(sigma2 / sim_data[1], np.ones_like(sigma2))
def test_egarch(self): egarch = EGARCH(p=1, o=1, q=1) sv = egarch.starting_values(self.resids) assert_equal(sv.shape[0], egarch.num_params) bounds = egarch.bounds(self.resids) assert_equal(len(bounds), egarch.num_params) const = np.log(10000.0) lnv = np.log(np.mean(self.resids ** 2.0)) assert_equal(bounds[0], (lnv - const, lnv + const)) assert_equal(bounds[1], (-np.inf, np.inf)) assert_equal(bounds[2], (-np.inf, np.inf)) assert_equal(bounds[3], (0.0, 1.0)) backcast = egarch.backcast(self.resids) w = 0.94 ** np.arange(75) backcast_test = np.sum((self.resids[:75] ** 2) * (w / w.sum())) assert_almost_equal(backcast, np.log(backcast_test)) var_bounds = egarch.variance_bounds(self.resids) parameters = np.array([.1, .1, -.1, .95]) egarch.compute_variance(parameters, self.resids, self.sigma2, backcast, var_bounds) cond_var_direct = np.zeros_like(self.sigma2) lnsigma2 = np.empty(self.T) std_resids = np.empty(self.T) abs_std_resids = np.empty(self.T) rec.egarch_recursion(parameters, self.resids, cond_var_direct, 1, 1, 1, self.T, backcast, var_bounds, lnsigma2, std_resids, abs_std_resids) assert_allclose(self.sigma2, cond_var_direct) a, b = egarch.constraints() a_target = np.vstack((np.array([[0, 0, 0, -1.0]]))) b_target = np.array([-1.0]) assert_array_equal(a, a_target) assert_array_equal(b, b_target) state = np.random.get_state() rng = Normal() sim_data = egarch.simulate(parameters, self.T, rng.simulate([])) np.random.set_state(state) e = np.random.standard_normal(self.T + 500) initial_value = 0.1 / (1 - 0.95) lnsigma2 = np.zeros(self.T + 500) lnsigma2[0] = initial_value sigma2 = np.zeros(self.T + 500) sigma2[0] = np.exp(lnsigma2[0]) data = np.zeros(self.T + 500) data[0] = np.sqrt(sigma2[0]) * e[0] norm_const = np.sqrt(2 / np.pi) for t in range(1, self.T + 500): lnsigma2[t] = parameters[0] lnsigma2[t] += parameters[1] * (np.abs(e[t - 1]) - norm_const) lnsigma2[t] += parameters[2] * e[t - 1] lnsigma2[t] += parameters[3] * lnsigma2[t - 1] sigma2 = np.exp(lnsigma2) data = e * np.sqrt(sigma2) data = data[500:] sigma2 = sigma2[500:] assert_almost_equal(data - sim_data[0] + 1.0, np.ones_like(data)) assert_almost_equal(sigma2 / sim_data[1], np.ones_like(sigma2)) names = egarch.parameter_names() names_target = ['omega', 'alpha[1]', 'gamma[1]', 'beta[1]'] assert_equal(names, names_target) assert_equal(egarch.name, 'EGARCH') assert_equal(egarch.num_params, 4) assert_equal(egarch.p, 1) assert_equal(egarch.o, 1) assert_equal(egarch.q, 1) assert isinstance(egarch.__str__(), str) txt = egarch.__repr__() assert str(hex(id(egarch))) in txt with pytest.raises(ValueError): EGARCH(p=0, o=0, q=1) with pytest.raises(ValueError): EGARCH(p=1, o=1, q=-1)
def test_egarch(self): egarch = EGARCH(p=1, o=1, q=1) sv = egarch.starting_values(self.resids) assert_equal(sv.shape[0], egarch.num_params) bounds = egarch.bounds(self.resids) assert_equal(len(bounds), egarch.num_params) const = np.log(10000.0) lnv = np.log(np.mean(self.resids ** 2.0)) assert_equal(bounds[0], (lnv - const, lnv + const)) assert_equal(bounds[1], (-np.inf, np.inf)) assert_equal(bounds[2], (-np.inf, np.inf)) assert_equal(bounds[3], (0.0, 1.0)) backcast = egarch.backcast(self.resids) w = 0.94 ** np.arange(75) backcast_test = np.sum((self.resids[:75] ** 2) * (w / w.sum())) assert_almost_equal(backcast, np.log(backcast_test)) var_bounds = egarch.variance_bounds(self.resids) parameters = np.array([.1, .1, -.1, .95]) egarch.compute_variance(parameters, self.resids, self.sigma2, backcast, var_bounds) cond_var_direct = np.zeros_like(self.sigma2) lnsigma2 = np.empty(self.T) std_resids = np.empty(self.T) abs_std_resids = np.empty(self.T) rec.egarch_recursion(parameters, self.resids, cond_var_direct, 1, 1, 1, self.T, backcast, var_bounds, lnsigma2, std_resids, abs_std_resids) assert_allclose(self.sigma2, cond_var_direct) A, b = egarch.constraints() A_target = np.vstack((np.array([[0, 0, 0, -1.0]]))) b_target = np.array([-1.0]) assert_array_equal(A, A_target) assert_array_equal(b, b_target) state = np.random.get_state() rng = Normal() sim_data = egarch.simulate(parameters, self.T, rng.simulate([])) np.random.set_state(state) e = np.random.standard_normal(self.T + 500) initial_value = 0.1 / (1 - 0.95) lnsigma2 = np.zeros(self.T + 500) lnsigma2[0] = initial_value sigma2 = np.zeros(self.T + 500) sigma2[0] = np.exp(lnsigma2[0]) data = np.zeros(self.T + 500) data[0] = np.sqrt(sigma2[0]) * e[0] norm_const = np.sqrt(2 / np.pi) for t in range(1, self.T + 500): lnsigma2[t] = parameters[0] lnsigma2[t] += parameters[1] * (np.abs(e[t - 1]) - norm_const) lnsigma2[t] += parameters[2] * e[t - 1] lnsigma2[t] += parameters[3] * lnsigma2[t - 1] sigma2 = np.exp(lnsigma2) data = e * np.sqrt(sigma2) data = data[500:] sigma2 = sigma2[500:] assert_almost_equal(data - sim_data[0] + 1.0, np.ones_like(data)) assert_almost_equal(sigma2 / sim_data[1], np.ones_like(sigma2)) names = egarch.parameter_names() names_target = ['omega', 'alpha[1]', 'gamma[1]', 'beta[1]'] assert_equal(names, names_target) assert_equal(egarch.name, 'EGARCH') assert_equal(egarch.num_params, 4) assert_equal(egarch.p, 1) assert_equal(egarch.o, 1) assert_equal(egarch.q, 1)