PyMC是一个实现贝叶斯统计模型和马尔科夫链蒙塔卡洛采样工具拟合算法的Python库。PyMC的灵活性及可扩展性使得它能够适用于解决各种问题。除了包含核心采样功能,PyMC还包含了统计输出、绘图、拟合优度检验和收敛性诊断等方法。
PyMC使得贝叶斯分析尽可能更加容易。以下是一些PyMC库的特性:
用马尔科夫链蒙特卡洛算法和其他算法来拟合贝叶斯统计分析模型。
包含了大范围的常用统计分布。
尽可能地使用了NumPy的一些功能。
包括一个高斯建模过程的模块。
采样循环可以被暂停和手动调整,或者保存和重新启动。
创建包括表格和图表的摘要说明。
算法跟踪记录可以保存为纯文本,pickles,SQLite或MySQL数据库文档或HDF5文档。
提供了一些收敛性诊断方法。
可扩展性:引入自定义的步骤方法和非常规的概率分布。
MCMC循环可以嵌入在较大的程序中,结果可以使用Python进行分析。
PyMC可以运行在Mac OS X,Linux和Windows系统中。安装一些其他预装库可以更大程度地提高PyMC的性能和功能。
PyMC的运行要求一些预装库的安装及配置。
Python2.6及以上版本
NumPy(1.6版本及以上)
Matplotlib(1.0版本及以上)
SciPy(可选)
pyTables(可选)
pydot(可选)
IPython(可选)
nose(可选)
使用方法:
1. 模型定义:
# Import relevant modules import pymc import numpy as np # Some data n = 5*np.ones(4,dtype=int) x = np.array([-.86,-.3,-.05,.73]) # Priors on unknown parameters alpha = pymc.Normal('alpha',mu=0,tau=.01) beta = pymc.Normal('beta',mu=0,tau=.01) # Arbitrary deterministic function of parameters @pymc.deterministic def theta(a=alpha, b=beta): """theta = logit^{-1}(a+b)""" return pymc.invlogit(a+b*x) # Binomial likelihood for data d = pymc.Binomial('d', n=n, p=theta, value=np.array([0.,1.,3.,5.]),\ observed=True)
调用模型:
import pymc import mymodel S = pymc.MCMC(mymodel, db='pickle') S.sample(iter=10000, burn=5000, thin=2) pymc.Matplot.plot(S)
以上代码运行会产生10000个后验样本。这个样本会存储在Python序列化数据库中。