Bayesian Open Source Software for Biomedicine: Stan, ArviZ and PyMC3
Christopher Fonnesbeck (NumFOCUS)
To develop key infrastructure updates and collaboration resources for state-of-the-art Bayesian modeling software libraries.
PyMC3 is the current version of the PyMC open source probabilistic programming framework for Python, having been forked over 1,300 times and starred over 5,400 times on GitHub. It provides a high-level user API for specifying and fitting Bayesian models that allows applied users to focus on solving the scientific problem at hand, rather than on the mechanics of Bayesian computation. It is Apache 2 licensed. Given that Python is the dominant scientific programming language and that PyMC3 is designed in the style and philosophy of Python, e.g., ‘Pythonic’, it lowers barriers to entry for using Bayesian modeling by offering new inference possibilities in the context of familiar data structures, conventions and execution environment while offering state-of-the-art inference.
ArviZ is an Apache 2.0 licensed package that integrates seamlessly with established probabilistic programming languages like PyStan, PyMC3, Edward, emcee, Pyro, and easily integrated with novel or bespoke Bayesian analyses. Where the aim of the probabilistic programming languages is to make it easy to build and solve Bayesian models, the aim of the ArviZ library is to make it easy to process and analyze the results from the Bayesian models.
Stan 1.0 was released in 2012 as a stand alone probabilistic modeling language with language interfaces to R (RStan) and Python (Pystan). From these beginnings, Stan resides in the center of a broad ecosystem of interfaces to other languages (e.g. JuliaStan, ScalaStan), post processing tools (e.g. ShinyStan, Loo, Posterior) as well as partner package ArviZ. All packages are released under permissive open source licenses (BSD-3 or Apache 2) with a few exceptions due to copy left included libraries which are GPL 2. Stan follows in the tradition of BUGS and JAGS with the intent of mimicking traditional mathematical notation in the programming language as closely as possible.