# BAyesian Model-Building Interface in Python

Bambi is a high-level Bayesian model-building interface written in Python. It works with the PyMC probabilistic programming framework and is designed to make it extremely easy to fit Bayesian mixed-effects models common in biology, social sciences and other disciplines.

## Dependencies

Bambi is tested on Python 3.10+ and depends on ArviZ, formulae, NumPy, pandas and PyMC (see pyproject.toml for version information).

## Installation

Bambi is available from the Python Package Index at https://pypi.org/project/bambi, alternatively it can be installed using Conda.

### PyPI

The latest release of Bambi can be installed using pip:

`pip install bambi`

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

`pip install git+https://github.com/bambinos/bambi.git`

### Conda

If you use Conda, you can also install the latest release of Bambi with the following command:

`conda install -c conda-forge bambi`

## Examples

In the following two examples we assume the following basic setup

```
import arviz as az
import bambi as bmb
import numpy as np
import pandas as pd
```

### Linear regression

A simple fixed effects model is shown in the example below.

```
# Read in a dataset from the package content
= bmb.load_data("sleepstudy")
data
# See first rows
data.head()
# Initialize the fixed effects only model
= bmb.Model('Reaction ~ Days', data)
model
# Get model description
print(model)
# Fit the model using 1000 on each chain
= model.fit(draws=1000)
results
# Key summary and diagnostic info on the model parameters
az.summary(results)
# Use ArviZ to plot the results
az.plot_trace(results)
```

```
Reaction Days Subject
0 249.5600 0 308
1 258.7047 1 308
2 250.8006 2 308
3 321.4398 3 308
4 356.8519 4 308
```

```
Formula: Reaction ~ Days
Family: gaussian
Link: mu = identity
Observations: 180
Priors:
target = mu
Common-level effects
Intercept ~ Normal(mu: 298.5079, sigma: 261.0092)
Days ~ Normal(mu: 0.0, sigma: 48.8915)
Auxiliary parameters
sigma ~ HalfStudentT(nu: 4.0, sigma: 56.1721)
```

```
mean sd hdi_3% hdi_97% mcse_mean mcse_sd ess_bulk ess_tail r_hat
Intercept 251.552 6.658 238.513 263.417 0.083 0.059 6491.0 2933.0 1.0
Days 10.437 1.243 8.179 12.793 0.015 0.011 6674.0 3242.0 1.0
Reaction_sigma 47.949 2.550 43.363 52.704 0.035 0.025 5614.0 2974.0 1.0
```

First, we create and build a Bambi `Model`

. Then, the method `model.fit()`

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_trace()`

to visualize them.

### Logistic regression

In this example we will use a simulated dataset created as shown below.

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

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.

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

After this, we can evaluate the model as before.

### More

For a more in-depth introduction to Bambi see our Quickstart and check the notebooks in the Examples webpage.

## Citation

If you use Bambi and want to cite it please use

```
@article{
Capretto2022,
title={Bambi: A Simple Interface for Fitting Bayesian Linear Models in Python},
volume={103},
url={https://www.jstatsoft.org/index.php/jss/article/view/v103i15},
doi={10.18637/jss.v103.i15},
number={15},
journal={Journal of Statistical Software},
author={Capretto, Tomás and Piho, Camen and Kumar, Ravin and Westfall, Jacob and Yarkoni, Tal and Martin, Osvaldo A},
year={2022},
pages={1–29}
}
```

## Contributing

We welcome contributions from interested individuals or groups! For information about contributing to Bambi, check out our instructions, policies, and guidelines here.

## Contributors

See the GitHub contributor page.