def test_conditional_loglikelihoods(): # AR(1) without mean, k_regimes=2, non-switching variance endog = np.ones(10) mod = markov_autoregression.MarkovAutoregression(endog, k_regimes=2, order=1) assert_equal(mod.nobs, 9) assert_equal(mod.endog, np.ones(9)) params = np.r_[0.5, 0.5, 2., 3., 2., 0.1, 0.5] resid = mod._resid(params) conditional_likelihoods = (np.exp(-0.5 * resid**2 / 2) / np.sqrt(2 * np.pi * 2)) assert_allclose(mod._conditional_loglikelihoods(params), np.log(conditional_likelihoods)) # AR(1) without mean, k_regimes=3, switching variance endog = np.ones(10) mod = markov_autoregression.MarkovAutoregression(endog, k_regimes=3, order=1, switching_variance=True) assert_equal(mod.nobs, 9) assert_equal(mod.endog, np.ones(9)) params = np.r_[[0.3] * 6, 2., 3., 4., 1.5, 3., 4.5, 0.1, 0.5, 0.8] mod_conditional_loglikelihoods = mod._conditional_loglikelihoods(params) conditional_likelihoods = mod._resid(params) # S_t = 0 conditional_likelihoods[0, :, :] = ( np.exp(-0.5 * conditional_likelihoods[0, :, :]**2 / 1.5) / np.sqrt(2 * np.pi * 1.5)) assert_allclose(mod_conditional_loglikelihoods[0, :, :], np.log(conditional_likelihoods[0, :, :])) # S_t = 1 conditional_likelihoods[1, :, :] = ( np.exp(-0.5 * conditional_likelihoods[1, :, :]**2 / 3.) / np.sqrt(2 * np.pi * 3.)) assert_allclose(mod_conditional_loglikelihoods[1, :, :], np.log(conditional_likelihoods[1, :, :])) # S_t = 2 conditional_likelihoods[2, :, :] = ( np.exp(-0.5 * conditional_likelihoods[2, :, :]**2 / 4.5) / np.sqrt(2 * np.pi * 4.5)) assert_allclose(mod_conditional_loglikelihoods[2, :, :], np.log(conditional_likelihoods[2, :, :]))
def test_predict(): # AR(1) without mean, k_regimes=2 endog = np.ones(10) mod = markov_autoregression.MarkovAutoregression(endog, k_regimes=2, order=1, trend='nc') assert_equal(mod.nobs, 9) assert_equal(mod.endog, np.ones(9)) params = np.r_[0.5, 0.5, 1., 0.1, 0.5] mod_resid = mod._resid(params) resids = np.zeros((2, 2, mod.nobs)) # Resids when: S_{t} = 0 resids[0, :, :] = np.ones(9) - 0.1 * np.ones(9) assert_allclose(mod_resid[0, :, :], resids[0, :, :]) # Resids when: S_{t} = 1 resids[1, :, :] = np.ones(9) - 0.5 * np.ones(9) assert_allclose(mod_resid[1, :, :], resids[1, :, :]) # AR(1) with mean, k_regimes=2 endog = np.arange(10) mod = markov_autoregression.MarkovAutoregression(endog, k_regimes=2, order=1) assert_equal(mod.nobs, 9) assert_equal(mod.endog, np.arange(1, 10)) params = np.r_[0.5, 0.5, 2., 3., 1., 0.1, 0.5] mod_resid = mod._resid(params) resids = np.zeros((2, 2, mod.nobs)) # Resids when: S_t = 0, S_{t-1} = 0 resids[0, 0, :] = (np.arange(1, 10) - 2.) - 0.1 * (np.arange(9) - 2.) assert_allclose(mod_resid[0, 0, :], resids[0, 0, :]) # Resids when: S_t = 0, S_{t-1} = 1 resids[0, 1, :] = (np.arange(1, 10) - 2.) - 0.1 * (np.arange(9) - 3.) assert_allclose(mod_resid[0, 1, :], resids[0, 1, :]) # Resids when: S_t = 1, S_{t-1} = 0 resids[1, 0, :] = (np.arange(1, 10) - 3.) - 0.5 * (np.arange(9) - 2.) assert_allclose(mod_resid[1, 0, :], resids[1, 0, :]) # Resids when: S_t = 1, S_{t-1} = 1 resids[1, 1, :] = (np.arange(1, 10) - 3.) - 0.5 * (np.arange(9) - 3.) assert_allclose(mod_resid[1, 1, :], resids[1, 1, :]) # AR(2) with mean, k_regimes=3 endog = np.arange(10) mod = markov_autoregression.MarkovAutoregression(endog, k_regimes=3, order=2) assert_equal(mod.nobs, 8) assert_equal(mod.endog, np.arange(2, 10)) params = np.r_[[0.3] * 6, 2., 3., 4, 1., 0.1, 0.5, 0.8, -0.05, -0.25, -0.4] mod_resid = mod._resid(params) resids = np.zeros((3, 3, 3, mod.nobs)) # Resids when: S_t = 0, S_{t-1} = 0, S_{t-2} = 0 resids[0, 0, 0, :] = ((np.arange(2, 10) - 2.) - 0.1 * (np.arange(1, 9) - 2.) - (-0.05) * (np.arange(8) - 2.)) assert_allclose(mod_resid[0, 0, 0, :], resids[0, 0, 0, :]) # Resids when: S_t = 1, S_{t-1} = 0, S_{t-2} = 0 resids[1, 0, 0, :] = ((np.arange(2, 10) - 3.) - 0.5 * (np.arange(1, 9) - 2.) - (-0.25) * (np.arange(8) - 2.)) assert_allclose(mod_resid[1, 0, 0, :], resids[1, 0, 0, :]) # Resids when: S_t = 0, S_{t-1} = 2, S_{t-2} = 1 resids[0, 2, 1, :] = ((np.arange(2, 10) - 2.) - 0.1 * (np.arange(1, 9) - 4.) - (-0.05) * (np.arange(8) - 3.)) assert_allclose(mod_resid[0, 2, 1, :], resids[0, 2, 1, :]) # AR(1) with mean + non-switching exog endog = np.arange(10) exog = np.r_[0.4, 5, 0.2, 1.2, -0.3, 2.5, 0.2, -0.7, 2., -1.1] mod = markov_autoregression.MarkovAutoregression(endog, k_regimes=2, order=1, exog=exog) assert_equal(mod.nobs, 9) assert_equal(mod.endog, np.arange(1, 10)) params = np.r_[0.5, 0.5, 2., 3., 1.5, 1., 0.1, 0.5] mod_resid = mod._resid(params) resids = np.zeros((2, 2, mod.nobs)) # Resids when: S_t = 0, S_{t-1} = 0 resids[0, 0, :] = ((np.arange(1, 10) - 2. - 1.5 * exog[1:]) - 0.1 * (np.arange(9) - 2. - 1.5 * exog[:-1])) assert_allclose(mod_resid[0, 0, :], resids[0, 0, :]) # Resids when: S_t = 0, S_{t-1} = 1 resids[0, 1, :] = ((np.arange(1, 10) - 2. - 1.5 * exog[1:]) - 0.1 * (np.arange(9) - 3. - 1.5 * exog[:-1])) assert_allclose(mod_resid[0, 1, :], resids[0, 1, :]) # Resids when: S_t = 1, S_{t-1} = 0 resids[1, 0, :] = ((np.arange(1, 10) - 3. - 1.5 * exog[1:]) - 0.5 * (np.arange(9) - 2. - 1.5 * exog[:-1])) assert_allclose(mod_resid[1, 0, :], resids[1, 0, :]) # Resids when: S_t = 1, S_{t-1} = 1 resids[1, 1, :] = ((np.arange(1, 10) - 3. - 1.5 * exog[1:]) - 0.5 * (np.arange(9) - 3. - 1.5 * exog[:-1])) assert_allclose(mod_resid[1, 1, :], resids[1, 1, :])
def setup_class(cls, true, endog, atol=1e-5, rtol=1e-7, **kwargs): cls.model = markov_autoregression.MarkovAutoregression(endog, **kwargs) cls.true = true cls.result = cls.model.smooth(cls.true['params']) cls.atol = atol cls.rtol = rtol