Esempio n. 1
0
 def test_automatic_use_of_sort(self):
     with pm.Model() as model:
         s_g = pm.Simulator(
             "s_g",
             None,
             params=None,
             distance="gaussian_kernel",
             sum_stat="mean",
             observed=self.data,
         )
         s_w = pm.Simulator(
             "s_w",
             None,
             params=None,
             distance="wasserstein",
             sum_stat="identity",
             observed=self.data,
         )
         s_e = pm.Simulator(
             "s_e",
             None,
             params=None,
             distance="energy",
             sum_stat="identity",
             observed=self.data,
         )
     assert s_g.distribution.sum_stat is np.mean
     assert s_w.distribution.sum_stat is np.sort
     assert s_e.distribution.sum_stat is np.sort
Esempio n. 2
0
    def setup_class(self):
        super().setup_class()
        self.data = np.random.normal(loc=0, scale=1, size=1000)

        def normal_sim(a, b):
            return np.random.normal(a, b, 1000)

        with pm.Model() as self.SMABC_test:
            a = pm.Normal("a", mu=0, sigma=1)
            b = pm.HalfNormal("b", sigma=1)
            s = pm.Simulator(
                "s", normal_sim, params=(a, b), sum_stat="sort", epsilon=1, observed=self.data
            )
            self.s = s

        def quantiles(x):
            return np.quantile(x, [0.25, 0.5, 0.75])

        def abs_diff(eps, obs_data, sim_data):
            return np.mean(np.abs((obs_data - sim_data) / eps))

        with pm.Model() as self.SMABC_test2:
            a = pm.Normal("a", mu=0, sigma=1)
            b = pm.HalfNormal("b", sigma=1)
            s = pm.Simulator(
                "s",
                normal_sim,
                params=(a, b),
                distance=abs_diff,
                sum_stat=quantiles,
                epsilon=1,
                observed=self.data,
            )
Esempio n. 3
0
    def setup_class(self):
        super().setup_class()
        self.data = np.sort(np.random.normal(loc=0, scale=1, size=1000))

        def normal_sim(a, b):
            return np.sort(np.random.normal(a, b, 1000))

        with pm.Model() as self.SMABC_test:
            a = pm.Normal("a", mu=0, sd=5)
            b = pm.HalfNormal("b", sd=2)
            s = pm.Simulator("s", normal_sim, observed=self.data)
Esempio n. 4
0
 def test_automatic_use_of_sort(self):
     with pm.Model() as model:
         s_k = pm.Simulator(
             "s_k",
             None,
             params=None,
             distance="kullback_leibler",
             sum_stat="sort",
             observed=self.data,
         )
     assert s_k.distribution.sum_stat is pm.distributions.simulator.identity
Esempio n. 5
0
    def test_named_models_are_unsupported(self):
        def normal_sim(a, b):
            return np.random.normal(a, b, 1000)

        with pm.Model(name="NamedModel"):
            a = pm.Normal("a", mu=0, sigma=1)
            b = pm.HalfNormal("b", sigma=1)
            c = pm.Potential("c", pm.math.switch(a > 0, 0, -np.inf))
            s = pm.Simulator(
                "s", normal_sim, params=(a, b), sum_stat="sort", epsilon=1, observed=self.data
            )
            with pytest.raises(NotImplementedError, match="named models"):
                pm.sample_smc(draws=10, kernel="ABC")