def test_mcmc_with_other_prior(self): test_rel = relationship.Relationship(utils.straight_line, TEST_X, TEST_Y) test_rel.max_likelihood('mini') def other_prior(): """ Another potential prior. """ priors = [] for i, variable in enumerate(test_rel.variables): loc = variable.n scale = 1 priors.append(norm(loc=loc, scale=scale)) return priors actual_results = sampling.mcmc(test_rel, prior_function=other_prior, n_burn=10, n_samples=10) assert_equal( isinstance(actual_results["distributions"][0], Distribution), True) assert_equal( isinstance(actual_results["distributions"][1], Distribution), True) assert_equal(actual_results["distributions"][0].size, 500) assert_equal(actual_results["distributions"][1].size, 500)
def test_mcmc_with_variable_median_zero(self): test_rel = relationship.Relationship(utils.straight_line, TEST_X, TEST_Y) test_rel.variables[0] = Distribution(np.zeros((7))) actual_results = sampling.mcmc(test_rel, n_burn=10, n_samples=10) assert_equal( isinstance(actual_results["distributions"][0], Distribution), True) assert_equal( isinstance(actual_results["distributions"][1], Distribution), True) assert_equal(actual_results["distributions"][0].size, 500) assert_equal(actual_results["distributions"][1].size, 500)
def test_mcmc(self): test_rel = relationship.Relationship(utils.straight_line, TEST_X, TEST_Y) test_rel.max_likelihood('mini') actual_results = sampling.mcmc(test_rel, n_burn=10, n_samples=10) assert_equal( isinstance(actual_results["distributions"][0], Distribution), True) assert_equal( isinstance(actual_results["distributions"][1], Distribution), True) assert_equal(actual_results["distributions"][0].size, 500) assert_equal(actual_results["distributions"][1].size, 500)
def mcmc(self, prior_function=None, walkers=50, n_samples=500, n_burn=500, progress=True): """ Perform MCMC to get the posterior probability distributions for the variables of the relationship. *Note*, running this method will populate the :py:attr:`~uravu.relationship.Relationship.variables` attribute with :py:class:`~uravu.distribution.Distribution` objects. Once run, a result dictionary containing the :py:attr:`distributions`, :py:attr:`chain`, and :py:attr:`samples` from :py:mod:`emcee` is piped into the class variable :py:attr:`mcmc_results`. Args: prior_function (:py:attr:`callable`, optional): The function to populated some prior distributions. Default is the broad uniform priors in :func:`~uravu.relationship.Relationship.prior()`. walkers (:py:attr:`int`, optional): Number of MCMC walkers. Default is :py:attr:`50`. n_samples (:py:attr:`int`, optional): Number of sample points. Default is :py:attr:500`. n_burn (:py:attr:`int`, optional): Number of burn in samples. Default is :py:attr:`500`. progress (:py:attr:`bool`, optional): Show :py:mod:`tqdm` progress for sampling. Default is :py:attr:`True`. """ self.mcmc_results = sampling.mcmc(self, prior_function=prior_function, walkers=walkers, n_samples=n_samples, n_burn=n_burn, progress=progress) self.variables = self.mcmc_results["distributions"]