Awesome Open Source
Awesome Open Source

PyPi version Build Status codecov Code style: black

BAyesian Model-Building Interface in Python


Bambi is a high-level Bayesian model-building interface written in Python. It's built on top of the PyMC probabilistic programming framework, and is designed to make it extremely easy to fit mixed-effects models common in social sciences settings using a Bayesian approach.


Bambi requires a working Python interpreter (3.8+). We recommend installing Python and key numerical libraries using the Anaconda Distribution, which has one-click installers available on all major platforms.

Assuming a standard Python environment is installed on your machine (including pip), Bambi itself can be installed in one line using pip:

pip install bambi

Alternatively, if you want the bleeding edge version of the package you can install from GitHub:

pip install git+


Bambi requires working versions of ArviZ, formulae, NumPy, pandas and PyMC. Dependencies are listed in requirements.txt, and should all be installed by the Bambi installer; no further action should be required.


In the following two examples we assume the following basic setup

import bambi as bmb
import numpy as np
import pandas as pd

data = pd.DataFrame({
    "y": np.random.normal(size=50),
    "g": np.random.choice(["Yes", "No"], size=50),
    "x1": np.random.normal(size=50),
    "x2": np.random.normal(size=50)

Linear regression

model = bmb.Model("y ~ x1 + x2", data)
fitted =

In the first line we create and build a Bambi Model. The second line tells the sampler to start running and it returns an InferenceData object, which can be passed to several ArviZ functions such as az.summary() to get a summary of the parameters distribution and sample diagnostics or az.plot_traces() to visualize them.

Logistic regression

Here we just add the family argument set to "bernoulli" to tell Bambi we are modelling a binary response. By default, it uses a logit link. We can also use some syntax sugar to specify which event we want to model. We just say g['Yes'] and Bambi will understand we want to model the probability of a "Yes" response. But this notation is not mandatory. If we use "g ~ x1 + x2", Bambi will pick one of the events to model and will inform us which one it picked.

model = bmb.Model("g['Yes'] ~ x1 + x2", data, family="bernoulli")
fitted =


The Bambi documentation can be found in the official docs


If you use Bambi and want to cite it please use

 title={Bambi: A Simple Interface for Fitting Bayesian Linear Models in Python},
 journal={Journal of Statistical Software},
 author={Capretto, Toms and Piho, Camen and Kumar, Ravin and Westfall, Jacob and Yarkoni, Tal and Martin, Osvaldo A},


Bambi is a community project and welcomes contributions. Additional information can be found in the Contributing Readme.

For a list of contributors see the GitHub contributor page


If you want to support Bambi financially, you can make a donation to our sister project PyMC.

Code of Conduct

Bambi wishes to maintain a positive community. Additional details can be found in the Code of Conduct


MIT License

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Python (889,550
Bayesian (3,726
Bayesian Inference (876
Statistical Analysis (718
Regression Models (370