From fde5632b10445f65a730bdd79894858da13b38a3 Mon Sep 17 00:00:00 2001 From: Boje Deforce <72612139+B-Deforce@users.noreply.github.com> Date: Mon, 13 Jan 2025 11:49:53 +0100 Subject: [PATCH 1/2] Fix random seed for "vi" Random seed was not properly passed when `inference_method="vi"`. This is now resolved. --- bambi/backend/pymc.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bambi/backend/pymc.py b/bambi/backend/pymc.py index f8ca7453..aea3f5c0 100644 --- a/bambi/backend/pymc.py +++ b/bambi/backend/pymc.py @@ -148,7 +148,7 @@ def run( **kwargs, ) elif inference_method in self.pymc_methods["vi"]: - result = self._run_vi(**kwargs) + result = self._run_vi(random_seed, **kwargs) elif inference_method == "laplace": result = self._run_laplace(draws, omit_offsets, include_response_params) else: @@ -382,9 +382,9 @@ def _clean_results(self, idata, omit_offsets, include_response_params, idata_fro return idata - def _run_vi(self, **kwargs): + def _run_vi(self, random_seed, **kwargs): with self.model: - self.vi_approx = pm.fit(**kwargs) + self.vi_approx = pm.fit(random_seed=random_seed, **kwargs) return self.vi_approx def _run_laplace(self, draws, omit_offsets, include_response_params): From b9058b5e3092cb5f7346684bc20efcff7f08934f Mon Sep 17 00:00:00 2001 From: Boje Deforce Date: Mon, 13 Jan 2025 20:42:32 +0100 Subject: [PATCH 2/2] Relaxed boundary values for beta regression --- tests/test_models.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_models.py b/tests/test_models.py index b7b89b44..48590813 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -824,16 +824,16 @@ def test_beta_regression(self, gasoline_data): model.predict(idata, kind="response") assert (0 < idata.posterior["mu"]).all() & (idata.posterior["mu"] < 1).all() - assert (0 < idata.posterior_predictive["yield"]).all() & ( - idata.posterior_predictive["yield"] < 1 + assert (0 <= idata.posterior_predictive["yield"]).all() & ( + idata.posterior_predictive["yield"] <= 1 ).all() model.predict(idata, kind="response_params", data=gasoline_data.iloc[:20, :]) model.predict(idata, kind="response", data=gasoline_data.iloc[:20, :]) assert (0 < idata.posterior["mu"]).all() & (idata.posterior["mu"] < 1).all() - assert (0 < idata.posterior_predictive["yield"]).all() & ( - idata.posterior_predictive["yield"] < 1 + assert (0 <= idata.posterior_predictive["yield"]).all() & ( + idata.posterior_predictive["yield"] <= 1 ).all()