Python中的贝叶斯模型构建接口
项目描述
Python中的贝叶斯模型构建接口
概述
Bambi是一个用Python编写的面向高级贝叶斯模型构建的接口。它建立在PyMC概率编程框架之上,旨在通过贝叶斯方法使混合效应模型在社会科学领域的应用变得极其简单。
安装
Bambi需要一个可工作的Python解释器(3.10+)。我们建议使用Anaconda发行版安装Python和关键数值库,该发行版在所有主要平台上都提供一键安装程序。
假设您的机器上已安装了标准Python环境(包括pip),您可以使用pip一行命令安装Bambi:
pip install bambi
或者,如果您想安装包的最新版本,可以从GitHub安装:
pip install git+https://github.com/bambinos/bambi.git
依赖项
Bambi需要ArviZ、formulae、NumPy、pandas和PyMC的正常版本。依赖项列在pyproject.toml
中,并且应该由Bambi安装程序安装;无需采取其他操作。
示例
在以下两个示例中,我们假设以下基本设置:
import arviz as az
import bambi as bmb
import numpy as np
import pandas as pd
线性回归
以下示例展示了简单的固定效应模型。
# Read in a dataset from the package content
data = bmb.load_data("sleepstudy")
# See first rows
data.head()
# Initialize the fixed effects only model
model = bmb.Model('Reaction ~ Days', data)
# Get model description
print(model)
# Fit the model using 1000 on each chain
results = model.fit(draws=1000)
# 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
首先,我们创建和构建一个Bambi Model
。然后,使用model.fit()
方法告诉采样器开始运行,并返回一个InferenceData
对象,该对象可以传递给ArviZ的多个函数,如az.summary()
以获取参数分布的摘要和样本诊断,或az.plot_trace()
以可视化它们。
逻辑回归
在这个示例中,我们将使用以下方式创建的模拟数据集:
data = pd.DataFrame({
"g": np.random.choice(["Yes", "No"], size=50),
"x1": np.random.normal(size=50),
"x2": np.random.normal(size=50)
})
在这里,我们只需将family
参数设置为"bernoulli"
,告诉Bambi我们正在建模二元响应。默认情况下,它使用logit连接。我们也可以使用一些语法糖来指定我们想要建模的事件。我们只需说g['Yes']
,Bambi就会理解我们想要建模的是"Yes"
响应的概率。但这个表示法不是强制性的。如果我们使用"g ~ x1 + x2"
,Bambi将选择一个事件进行建模,并告知我们它选择了哪个。
model = bmb.Model("g['Yes'] ~ x1 + x2", data, family="bernoulli")
fitted = model.fit()
之后,我们可以像以前一样评估模型。
更多
要深入了解Bambi,请参阅我们的快速入门,并查看示例网页中的笔记本。
文档
Bambi的文档可以在官方文档中找到。
引用
如果您使用Bambi并希望引用它,请使用以下引用:
@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}
}
贡献
Bambi是一个社区项目,欢迎贡献。更多信息可以在贡献Readme中找到。
要查看贡献者列表,请参阅GitHub贡献者页面。
捐赠
如果您想从经济上支持Bambi,您可以向我们的姊妹项目PyMC捐赠。
行为准则
Bambi希望维护一个积极的社区。更多详情可以在行为准则中找到。
许可证
项目详情
下载文件
下载适用于您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。