Пример #1
0
    def setUp(self):
        self.x = np.array([1, 2, 3])
        self.y = np.array([1, 2, 3])
        self.first_likelihood = GaussianLikelihood(
            x=self.x,
            y=self.y,
            func=lambda x, param1, param2: (param1 + param2) * x,
            sigma=1,
        )
        self.second_likelihood = PoissonLikelihood(
            x=self.x, y=self.y, func=lambda x, param2, param3: (param2 + param3) * x
        )
        self.third_likelihood = ExponentialLikelihood(
            x=self.x, y=self.y, func=lambda x, param4, param5: (param4 + param5) * x
        )
        self.joint_likelihood = JointLikelihood(
            self.first_likelihood, self.second_likelihood, self.third_likelihood
        )

        self.first_likelihood.parameters["param1"] = 1
        self.first_likelihood.parameters["param2"] = 2
        self.second_likelihood.parameters["param2"] = 2
        self.second_likelihood.parameters["param3"] = 3
        self.third_likelihood.parameters["param4"] = 4
        self.third_likelihood.parameters["param5"] = 5

        self.joint_likelihood.parameters["param1"] = 1
        self.joint_likelihood.parameters["param2"] = 2
        self.joint_likelihood.parameters["param3"] = 3
        self.joint_likelihood.parameters["param4"] = 4
        self.joint_likelihood.parameters["param5"] = 5
Пример #2
0
 def test_sigma_other(self):
     likelihood = GaussianLikelihood(self.x,
                                     self.y,
                                     self.function,
                                     sigma=None)
     with self.assertRaises(ValueError):
         likelihood.sigma = 'test'
Пример #3
0
 def setUp(self):
     self.likelihood = GaussianLikelihood(
         x=np.linspace(0, 1, 2),
         y=np.linspace(0, 1, 2),
         func=lambda x, **kwargs: x,
         sigma=1,
     )
     self.priors = PriorDict(dict(a=Uniform(0, 1), b=Uniform(0, 1)))
     self._args = (self.likelihood, self.priors)
     self._kwargs = dict(
         outdir="outdir",
         label="label",
         use_ratio=False,
         plot=False,
         skip_import_verification=True,
     )
     self.sampler = Ptemcee(*self._args, **self._kwargs)
     self.expected = dict(
         ntemps=10,
         nwalkers=100,
         Tmax=None,
         betas=None,
         a=2.0,
         adaptation_lag=10000,
         adaptation_time=100,
         random=None,
         adapt=False,
         swap_ratios=False,
     )
Пример #4
0
 def test_repr(self):
     likelihood = GaussianLikelihood(self.x,
                                     self.y,
                                     self.function,
                                     sigma=self.sigma)
     expected = 'GaussianLikelihood(x={}, y={}, func={}, sigma={})' \
         .format(self.x, self.y, self.function.__name__, self.sigma)
     self.assertEqual(expected, repr(likelihood))
Пример #5
0
 def test_sigma_float(self):
     likelihood = GaussianLikelihood(self.x, self.y, self.function, sigma=None)
     likelihood.parameters["m"] = 2
     likelihood.parameters["c"] = 0
     likelihood.parameters["sigma"] = 1
     likelihood.log_likelihood()
     self.assertTrue(likelihood.sigma == 1)
Пример #6
0
 def test_set_sigma_None(self):
     likelihood = GaussianLikelihood(self.x, self.y, self.function, sigma=None)
     likelihood.parameters["m"] = 2
     likelihood.parameters["c"] = 0
     self.assertTrue(likelihood.sigma is None)
     with self.assertRaises(TypeError):
         likelihood.log_likelihood()
Пример #7
0
 def test_known_sigma(self):
     likelihood = GaussianLikelihood(self.x, self.y, self.function,
                                     self.sigma)
     likelihood.parameters['m'] = 2
     likelihood.parameters['c'] = 0
     likelihood.log_likelihood()
     self.assertEqual(likelihood.sigma, self.sigma)
Пример #8
0
 def test_known_array_sigma(self):
     sigma_array = np.ones(self.N) * self.sigma
     likelihood = GaussianLikelihood(self.x, self.y, self.function, sigma_array)
     likelihood.parameters["m"] = 2
     likelihood.parameters["c"] = 0
     likelihood.log_likelihood()
     self.assertTrue(type(likelihood.sigma) == type(sigma_array))
     self.assertTrue(all(likelihood.sigma == sigma_array))
time = np.arange(0, time_duration, 1 / sampling_frequency)
N = len(time)
data = model(time, **injection_parameters) + np.random.normal(0, sigma, N)

# We quickly plot the data to check it looks sensible
fig, ax = plt.subplots()
ax.plot(time, data, 'o', label='data')
ax.plot(time, model(time, **injection_parameters), '--r', label='signal')
ax.set_xlabel('time')
ax.set_ylabel('y')
ax.legend()
fig.savefig('{}/{}_data.png'.format(outdir, label))

# Now lets instantiate a version of our GaussianLikelihood, giving it
# the time, data and signal model
likelihood = GaussianLikelihood(time, data, model, sigma=sigma)

# From hereon, the syntax is exactly equivalent to other bilby examples
# We make a prior
priors = dict()
priors['m'] = bilby.core.prior.Uniform(0, 5, 'm')
priors['c'] = bilby.core.prior.Uniform(-2, 2, 'c')

# And run sampler
result = bilby.run_sampler(likelihood=likelihood,
                           priors=priors,
                           sampler='pymc3',
                           injection_parameters=injection_parameters,
                           outdir=outdir,
                           draws=2000,
                           label=label)
Пример #10
0
class TestJointLikelihood(unittest.TestCase):
    def setUp(self):
        self.x = np.array([1, 2, 3])
        self.y = np.array([1, 2, 3])
        self.first_likelihood = GaussianLikelihood(
            x=self.x,
            y=self.y,
            func=lambda x, param1, param2: (param1 + param2) * x,
            sigma=1,
        )
        self.second_likelihood = PoissonLikelihood(
            x=self.x, y=self.y, func=lambda x, param2, param3: (param2 + param3) * x
        )
        self.third_likelihood = ExponentialLikelihood(
            x=self.x, y=self.y, func=lambda x, param4, param5: (param4 + param5) * x
        )
        self.joint_likelihood = JointLikelihood(
            self.first_likelihood, self.second_likelihood, self.third_likelihood
        )

        self.first_likelihood.parameters["param1"] = 1
        self.first_likelihood.parameters["param2"] = 2
        self.second_likelihood.parameters["param2"] = 2
        self.second_likelihood.parameters["param3"] = 3
        self.third_likelihood.parameters["param4"] = 4
        self.third_likelihood.parameters["param5"] = 5

        self.joint_likelihood.parameters["param1"] = 1
        self.joint_likelihood.parameters["param2"] = 2
        self.joint_likelihood.parameters["param3"] = 3
        self.joint_likelihood.parameters["param4"] = 4
        self.joint_likelihood.parameters["param5"] = 5

    def tearDown(self):
        del self.x
        del self.y
        del self.first_likelihood
        del self.second_likelihood
        del self.third_likelihood
        del self.joint_likelihood

    def test_parameters_consistent_from_init(self):
        expected = dict(param1=1, param2=2, param3=3, param4=4, param5=5,)
        self.assertDictEqual(expected, self.joint_likelihood.parameters)

    def test_log_likelihood_correctly_sums(self):
        expected = (
            self.first_likelihood.log_likelihood()
            + self.second_likelihood.log_likelihood()
            + self.third_likelihood.log_likelihood()
        )
        self.assertEqual(expected, self.joint_likelihood.log_likelihood())

    def test_log_likelihood_checks_parameter_updates(self):
        self.first_likelihood.parameters["param2"] = 7
        self.second_likelihood.parameters["param2"] = 7
        self.joint_likelihood.parameters["param2"] = 7
        expected = (
            self.first_likelihood.log_likelihood()
            + self.second_likelihood.log_likelihood()
            + self.third_likelihood.log_likelihood()
        )
        self.assertEqual(expected, self.joint_likelihood.log_likelihood())

    def test_list_element_parameters_are_updated(self):
        self.joint_likelihood.parameters["param2"] = 7
        self.assertEqual(
            self.joint_likelihood.parameters["param2"],
            self.joint_likelihood.likelihoods[0].parameters["param2"],
        )
        self.assertEqual(
            self.joint_likelihood.parameters["param2"],
            self.joint_likelihood.likelihoods[1].parameters["param2"],
        )

    def test_log_noise_likelihood(self):
        self.first_likelihood.noise_log_likelihood = MagicMock(return_value=1)
        self.second_likelihood.noise_log_likelihood = MagicMock(return_value=2)
        self.third_likelihood.noise_log_likelihood = MagicMock(return_value=3)
        self.joint_likelihood = JointLikelihood(
            self.first_likelihood, self.second_likelihood, self.third_likelihood
        )
        expected = (
            self.first_likelihood.noise_log_likelihood()
            + self.second_likelihood.noise_log_likelihood()
            + self.third_likelihood.noise_log_likelihood()
        )
        self.assertEqual(expected, self.joint_likelihood.noise_log_likelihood())

    def test_init_with_list_of_likelihoods(self):
        with self.assertRaises(ValueError):
            JointLikelihood(
                [self.first_likelihood, self.second_likelihood, self.third_likelihood]
            )

    def test_setting_single_likelihood(self):
        self.joint_likelihood.likelihoods = self.first_likelihood
        self.assertEqual(
            self.first_likelihood.log_likelihood(),
            self.joint_likelihood.log_likelihood(),
        )

    def test_setting_likelihood_other(self):
        with self.assertRaises(ValueError):
            self.joint_likelihood.likelihoods = "test"
Пример #11
0
true_sigma_c0 = 1

fig1, ax1 = plt.subplots()
fig2, ax2 = plt.subplots()

# Make the sample sets
results = list()
for i in range(Nevents):
    c0 = np.random.normal(true_mu_c0, true_sigma_c0)
    c1 = np.random.uniform(-1, 1)
    injection_parameters = dict(c0=c0, c1=c1)

    data = model(x, **injection_parameters) + np.random.normal(0, sigma, N)
    line = ax1.plot(x, data, "-x", label=labels[i])

    likelihood = GaussianLikelihood(x, data, model, sigma)
    priors = dict(c0=Uniform(-10, 10, "c0"), c1=Uniform(-10, 10, "c1"))

    result = run_sampler(
        likelihood=likelihood,
        priors=priors,
        sampler="nestle",
        nlive=1000,
        outdir=outdir,
        verbose=False,
        label="individual_{}".format(i),
        save=False,
        injection_parameters=injection_parameters,
    )
    ax2.hist(
        result.posterior.c0,