def test_garch_no_o(self): T, resids, = self.T, self.resids sigma2, backcast = self.sigma2, self.backcast parameters = np.array([.1, .4, .3, .2]) fresids = resids ** 2.0 sresids = np.sign(resids) recpy.garch_recursion(parameters, fresids, sresids, sigma2, 1, 0, 1, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.garch_recursion(parameters, fresids, sresids, sigma2, 1, 0, 1, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2)
def test_garch_no_o(self): T, resids, = self.T, self.resids sigma2, backcast = self.sigma2, self.backcast parameters = np.array([.1, .4, .3, .2]) fresids = resids**2.0 sresids = np.sign(resids) recpy.garch_recursion(parameters, fresids, sresids, sigma2, 1, 0, 1, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.garch_recursion(parameters, fresids, sresids, sigma2, 1, 0, 1, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2)
def test_garch_arch(self): backcast = self.backcast T, resids, sigma2 = self.T, self.resids, self.sigma2 parameters = np.array([.1, .4, .3, .2]) fresids = resids**2.0 sresids = np.sign(resids) rec.garch_recursion(parameters, fresids, sresids, sigma2, 3, 0, 0, T, backcast, self.var_bounds) sigma2_garch = sigma2.copy() rec.arch_recursion(parameters, resids, sigma2, 3, T, backcast, self.var_bounds) assert_almost_equal(sigma2_garch, sigma2)
def test_garch_arch(self): backcast = self.backcast T, resids, sigma2 = self.T, self.resids, self.sigma2 parameters = np.array([.1, .4, .3, .2]) fresids = resids ** 2.0 sresids = np.sign(resids) rec.garch_recursion(parameters, fresids, sresids, sigma2, 3, 0, 0, T, backcast, self.var_bounds) sigma2_garch = sigma2.copy() rec.arch_recursion(parameters, resids, sigma2, 3, T, backcast, self.var_bounds) assert_almost_equal(sigma2_garch, sigma2)
def test_garch_direct(self): T, resids, = self.T, self.resids sigma2, backcast = self.sigma2, self.backcast parameters = np.array([.1, .4, .3, .2]) fresids = np.abs(resids)**2.0 sresids = np.sign(resids) for t in range(T): if t == 0: sigma2[t] = parameters.dot( np.array([1.0, backcast, 0.5 * backcast, backcast])) else: vars = np.array([ 1.0, resids[t - 1]**2.0, resids[t - 1]**2.0 * (resids[t - 1] < 0), sigma2[t - 1] ]) sigma2[t] = parameters.dot(vars) sigma2_python = sigma2.copy() rec.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2)
def test_garch_direct(self): T, resids, = self.T, self.resids sigma2, backcast = self.sigma2, self.backcast parameters = np.array([.1, .4, .3, .2]) fresids = np.abs(resids) ** 2.0 sresids = np.sign(resids) for t in range(T): if t == 0: sigma2[t] = parameters.dot( np.array([1.0, backcast, 0.5 * backcast, backcast])) else: vars = np.array([1.0, resids[t - 1] ** 2.0, resids[t - 1] ** 2.0 * (resids[t - 1] < 0), sigma2[t - 1]]) sigma2[t] = parameters.dot(vars) sigma2_python = sigma2.copy() rec.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2)
def test_garch_performance(self): garch_setup = """ parameters = np.array([.1, .4, .3, .2]) fresids = resids ** 2.0 sresids = np.sign(resids) """ garch_first = """ recpy.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, var_bounds) """ garch_second = """ rec.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, var_bounds) """ timer = Timer(garch_first, 'Numba', garch_second, 'Cython', 'GARCH', self.timer_setup + garch_setup) timer.display() assert timer.ratio < 10.0
def test_garch_performance(self): garch_setup = """ parameters = np.array([.1, .4, .3, .2]) fresids = resids ** 2.0 sresids = np.sign(resids) """ garch_first = """ recpy.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, var_bounds) """ garch_second = """ rec.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, var_bounds) """ timer = Timer(garch_first, 'Numba', garch_second, 'Cython', 'GARCH', self.timer_setup + garch_setup) timer.display() assert_true(timer.ratio < 10.0)
def test_bounds(self): T, resids, = self.T, self.resids sigma2, backcast = self.sigma2, self.backcast parameters = np.array([1e100, .4, .3, .2]) lags = np.array([1, 5, 22], dtype=np.int32) recpy.harch_recursion(parameters, resids, sigma2, lags, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.harch_recursion(parameters, resids, sigma2, lags, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2) assert (sigma2 >= self.var_bounds[:, 1]).all() parameters = np.array([-1e100, .4, .3, .2]) recpy.harch_recursion(parameters, resids, sigma2, lags, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.harch_recursion(parameters, resids, sigma2, lags, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2) assert_almost_equal(sigma2, self.var_bounds[:, 0]) parameters = np.array([1e100, .4, .3, .2]) fresids = resids**2.0 sresids = np.sign(resids) recpy.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2) assert (sigma2 >= self.var_bounds[:, 1]).all() parameters = np.array([-1e100, .4, .3, .2]) recpy.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2) assert_almost_equal(sigma2, self.var_bounds[:, 0]) parameters = np.array([1e100, .4, .3, .2]) recpy.arch_recursion(parameters, resids, sigma2, 3, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.arch_recursion(parameters, resids, sigma2, 3, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2) assert (sigma2 >= self.var_bounds[:, 1]).all() parameters = np.array([-1e100, .4, .3, .2]) recpy.arch_recursion(parameters, resids, sigma2, 3, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.arch_recursion(parameters, resids, sigma2, 3, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2) assert_almost_equal(sigma2, self.var_bounds[:, 0])
def test_bounds(self): T, resids, = self.T, self.resids sigma2, backcast = self.sigma2, self.backcast parameters = np.array([1e100, .4, .3, .2]) lags = np.array([1, 5, 22], dtype=np.int32) recpy.harch_recursion(parameters, resids, sigma2, lags, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.harch_recursion(parameters, resids, sigma2, lags, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2) assert_true((sigma2 >= self.var_bounds[:, 1]).all()) parameters = np.array([-1e100, .4, .3, .2]) recpy.harch_recursion(parameters, resids, sigma2, lags, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.harch_recursion(parameters, resids, sigma2, lags, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2) assert_almost_equal(sigma2, self.var_bounds[:, 0]) parameters = np.array([1e100, .4, .3, .2]) fresids = resids ** 2.0 sresids = np.sign(resids) recpy.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2) assert_true((sigma2 >= self.var_bounds[:, 1]).all()) parameters = np.array([-1e100, .4, .3, .2]) recpy.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2) assert_almost_equal(sigma2, self.var_bounds[:, 0]) parameters = np.array([1e100, .4, .3, .2]) recpy.arch_recursion(parameters, resids, sigma2, 3, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.arch_recursion(parameters, resids, sigma2, 3, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2) assert_true((sigma2 >= self.var_bounds[:, 1]).all()) parameters = np.array([-1e100, .4, .3, .2]) recpy.arch_recursion(parameters, resids, sigma2, 3, T, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.arch_recursion(parameters, resids, sigma2, 3, T, backcast, self.var_bounds) assert_almost_equal(sigma2_python, sigma2) assert_almost_equal(sigma2, self.var_bounds[:, 0])