class TestLinearStateSpace(unittest.TestCase): def setUp(self): # Initial Values A = .95 C = .05 G = 1. mu_0 = .75 self.ss = LSS(A, C, G, mu_0) def tearDown(self): del self.ss def test_stationarity(self): vals = self.ss.stationary_distributions(max_iter=1000, tol=1e-9) ssmux, ssmuy, sssigx, sssigy = vals self.assertTrue(abs(ssmux - ssmuy) < 2e-8) self.assertTrue(abs(sssigx - sssigy) < 2e-8) self.assertTrue(abs(ssmux) < 2e-8) self.assertTrue(abs(sssigx - self.ss.C/(1 - self.ss.A**2))) def test_replicate(self): xval, yval = self.ss.replicate(T=100, num_reps=5000) assert_allclose(xval, yval) self.assertEqual(xval.size, 5000) self.assertLessEqual(abs(np.mean(xval)), .05)
sigma = 0.1 A = [[phi_1, phi_2, phi_3, phi_4], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]] C = [sigma, 0, 0, 0] G = [1, 0, 0, 0] T = 30 ar = LSS(A, C, G) ymin, ymax = -0.8, 1.25 fig, ax = plt.subplots(figsize=(8,4)) ax.set_xlim(ymin, ymax) ax.set_xlabel(r'$y_t$', fontsize=16) x, y = ar.replicate(T=T, num_reps=500000) mu_x, mu_y, Sigma_x, Sigma_y = ar.moments(T=T, mu_0=np.ones(4)) f_y = norm(loc=float(mu_y), scale=float(np.sqrt(Sigma_y))) y = y.flatten() ax.hist(y, bins=50, normed=True, alpha=0.4) ygrid = np.linspace(ymin, ymax, 150) ax.plot(ygrid, f_y.pdf(ygrid), 'k-', lw=2, alpha=0.8, label='true density') ax.legend() plt.show()