Пример #1
0
    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)
Пример #2
0
 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)
Пример #3
0
 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)
Пример #4
0
    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"]