def estimate_bivariate_mle_jr(): ndim = 2 size = (10000, ndim) data = np.random.normal(size=size) eta, lam = 4, -.9 skst = SkewStudent(eta=eta, lam=lam) data = skst.rvs(size=size) model = SkStJR(ndim=ndim, data=data) out = model.fit_mle() print(out) model.from_theta(out.x) fig, axes = plt.subplots(nrows=size[1], ncols=1) for innov, ax in zip(data.T, axes): sns.kdeplot(innov, ax=ax, label='data') lines = [ax.get_lines()[0].get_xdata() for ax in axes] lines = np.vstack(lines).T marginals = model.marginals(lines) for line, margin, ax in zip(lines.T, marginals.T, axes): ax.plot(line, margin, label='fitted') ax.legend() plt.show()
def test_rvs(self): """Test simulation.""" eta, lam = [10, 15, 10], [.5, 1.5, 2] skst = SkStJR(ndim=len(lam), eta=eta, lam=lam) size = 10 rvs = skst.rvs(size=size) self.assertEqual(rvs.shape, (size, len(lam)))
def test_pdf(self): """Test pdf.""" eta, lam = [10, 15, 10], [.5, 1.5, 2] skst = SkStJR(eta=eta, lam=lam, ndim=len(lam)) size = (10, len(eta)) data = np.random.normal(size=size) pdf = skst.pdf(data) self.assertEqual(pdf.ndim, 1) self.assertEqual(pdf.shape, (size[0], ))
def test_marginals(self): """Test marginals.""" eta, lam = [10, 15, 10], [.5, 1.5, 2] skst = SkStJR(eta=eta, lam=lam, ndim=len(lam)) size = (10, len(eta)) data = np.random.normal(size=size) marginals = skst.marginals(data) self.assertEqual(marginals.ndim, 2) self.assertEqual(marginals.shape, size) self.assertGreater(marginals.all(), 0)
def test_init(self): """Test __init__.""" skst = SkStJR(ndim=3) self.assertIsInstance(skst.eta, np.ndarray) self.assertIsInstance(skst.lam, np.ndarray) eta, lam = [10, 15], [.5, 1.5] skst = SkStJR(ndim=len(lam), eta=eta, lam=lam) npt.assert_array_equal(skst.eta, np.array(eta)) npt.assert_array_equal(skst.lam, np.array(lam)) eta, lam = [15, 10], [1.5, .5] skst.from_theta(np.concatenate((eta, lam))) npt.assert_array_equal(skst.eta, np.array(eta)) npt.assert_array_equal(skst.lam, np.array(lam)) size = (10, len(eta)) data = np.random.normal(size=size) skst = SkStJR(ndim=len(lam), data=data) npt.assert_array_equal(skst.data, data)
def test_likelihood(self): """Test log-likelihood.""" eta, lam = [10, 15, 10], [.5, 1.5, 2] theta = np.concatenate((eta, lam)) size = (10, len(eta)) data = np.random.normal(size=size) skst = SkStJR(ndim=len(lam), eta=eta, lam=lam, data=data) logl1 = skst.likelihood(theta) logl2 = skst.likelihood(theta * 2) self.assertIsInstance(logl1, float) self.assertNotEqual(logl1, logl2) npt.assert_array_equal(skst.data, data)
def compute_quantile(): eta, lam = 20, 1.5 skst = SkStJR(ndim=1, eta=eta, lam=lam) cdf = skst.cdf(np.zeros(1) - 2) print(skst.ppf(cdf)) eta, lam = 20, 1.5 skst = SkStBL(ndim=1, eta=eta, lam=lam) cdf = skst.cdf(np.zeros(1) - 2) print(skst.ppf(cdf)) eta, lam = 100, 1.5 skst = SkStDM(ndim=1, eta=eta, lam=lam) cdf = skst.cdf(np.zeros(1) - 2) print(skst.ppf(cdf))
def plot_bidensity(): lam = [1.5, -2] mvsn = MvSN(ndim=len(lam), lam=lam) mvsn.plot_bidensity() eta = 20 skst = MvSt(ndim=2, eta=eta) skst.plot_bidensity() eta, lam = [20, 5], [1.5, .5] skst = SkStJR(ndim=len(lam), eta=eta, lam=lam) skst.plot_bidensity() eta, lam = 20, [1.5, .5] skst = SkStBL(ndim=len(lam), eta=eta, lam=lam) skst.plot_bidensity() eta, lam = 20, [1.5, -2] skst = SkStDM(ndim=len(lam), eta=eta, lam=lam) skst.plot_bidensity() eta, lam = 20, [1.5, -2] skst = SkStAC(ndim=len(lam), eta=eta, lam=lam) skst.plot_bidensity()
def compute_univ_cdf(): eta, lam = 20, 1.5 skst = SkStJR(ndim=1, eta=eta, lam=lam) print(skst.cdf(np.zeros(1))) eta, lam = 20, 1.5 skst = SkStBL(ndim=1, eta=eta, lam=lam) print(skst.cdf(np.zeros(1))) eta, lam = 100, 1.5 skst = SkStDM(ndim=1, eta=eta, lam=lam) print(skst.cdf(np.zeros(1) + 10))
def compute_cdf(): eta, lam = [20, 5], [1.5, .5] skst = SkStJR(ndim=len(lam), eta=eta, lam=lam) print(skst.cdf(np.zeros(2))) eta, lam = 20, [1.5, .5] skst = SkStBL(ndim=len(lam), eta=eta, lam=lam) print(skst.cdf(np.zeros(2))) eta, lam = 100, [1.5, -2] skst = SkStDM(ndim=len(lam), eta=eta, lam=lam) print(skst.cdf(np.zeros(2)))
def compute_univ_cdf(): eta, lam = 20, 1.5 skst = SkStJR(ndim=1, eta=eta, lam=lam) print(skst.cdf(np.zeros(1))) eta, lam = 20, 1.5 skst = SkStBL(ndim=1, eta=eta, lam=lam) print(skst.cdf(np.zeros(1))) eta, lam = 100, 1.5 skst = SkStDM(ndim=1, eta=eta, lam=lam) print(skst.cdf(np.zeros(1)+10))
def test_cdf(self): """Test cdf.""" eta, lam = 20, 1.5 skst = SkStJR(ndim=1, eta=eta, lam=lam) cdf = skst.cdf(np.zeros(1)) self.assertIsInstance(cdf, float) eta, lam = [20, 5], [1.5, .5] skst = SkStJR(ndim=len(lam), eta=eta, lam=lam) cdf = skst.cdf(np.zeros(2) - 10) self.assertIsInstance(cdf, float)
def test_quantile(self): """Test quantile.""" eta, lam = 20, 1.5 skst = SkStJR(ndim=1, eta=eta, lam=lam) arg = -2. cdf = skst.cdf(arg) ppf = skst.ppf(cdf) self.assertAlmostEqual(ppf, arg) arg = -.1 * np.ones(3) cdf = skst.cdf_vec(arg) quantiles = skst.ppf_vec(cdf) npt.assert_array_almost_equal(arg, quantiles)
def plot_bidensity_simulated(): size = int(1e4) lam = [1.5, -2] mvsn = MvSN(ndim=len(lam), lam=lam) mvsn.plot_bidensity() rvs = mvsn.rvs(size=size) sns.kdeplot(rvs, shade=True) plt.axis('square') plt.xlim([-2, 2]) plt.ylim([-2, 2]) plt.show() eta = 20 skst = MvSt(ndim=2, eta=eta) skst.plot_bidensity() rvs = skst.rvs(size=size) sns.kdeplot(rvs, shade=True) plt.axis('square') plt.xlim([-2, 2]) plt.ylim([-2, 2]) plt.show() eta, lam = [20, 5], [1.5, .5] skst = SkStJR(ndim=len(lam), eta=eta, lam=lam) skst.plot_bidensity() rvs = skst.rvs(size=size) sns.kdeplot(rvs, shade=True) plt.axis('square') plt.xlim([-2, 2]) plt.ylim([-2, 2]) plt.show() eta, lam = 20, [1.5, .5] skst = SkStBL(ndim=len(lam), eta=eta, lam=lam) skst.plot_bidensity() rvs = skst.rvs(size=size) sns.kdeplot(rvs, shade=True) plt.axis('square') plt.xlim([-2, 2]) plt.ylim([-2, 2]) plt.show() eta, lam = 20, [1.5, -2] skst = SkStDM(ndim=len(lam), eta=eta, lam=lam) skst.plot_bidensity() rvs = skst.rvs(size=size) sns.kdeplot(rvs, shade=True) plt.axis('square') plt.xlim([-2, 2]) plt.ylim([-2, 2]) plt.show() eta, lam = 20, [1.5, -2] skst = SkStAC(ndim=len(lam), eta=eta, lam=lam) skst.plot_bidensity() rvs = skst.rvs(size=size) sns.kdeplot(rvs, shade=True) plt.axis('square') plt.xlim([-2, 2]) plt.ylim([-2, 2]) plt.show()