Stan (software)
Template:Short description Template:Other uses Template:Infobox software
Stan is a probabilistic programming language for statistical inference written in C++.[1] The Stan language is used to specify a (Bayesian) statistical model with an imperative program calculating the log probability density function.[1]
Stan is licensed under the New BSD License. Stan is named in honour of Stanislaw Ulam, pioneer of the Monte Carlo method.[1]
Stan was created by a development team consisting of 52 members[2] that includes Andrew Gelman, Bob Carpenter, Daniel Lee, Ben Goodrich, and others.
Example
A simple linear regression model can be described as , where . This can also be expressed as . The latter form can be written in Stan as the following:
data {
int<lower=0> N;
vector[N] x;
vector[N] y;
}
parameters {
real alpha;
real beta;
real<lower=0> sigma;
}
model {
y ~ normal(alpha + beta * x, sigma);
}
Interfaces
The Stan language itself can be accessed through several interfaces:
- CmdStan – a command-line executable for the shell,
- CmdStanR and rstan – R software libraries,
- CmdStanPy and PyStan – libraries for the Python programming language,
- CmdStan.rb - library for the Ruby programming language,
- MatlabStan – integration with the MATLAB numerical computing environment,
- Stan.jl – integration with the Julia programming language,
- StataStan – integration with Stata.
- Stan Playground - online at [1]
In addition, higher-level interfaces are provided with packages using Stan as backend, primarily in the R language:[3]
- rstanarm provides a drop-in replacement for frequentist models provided by base R and lme4 using the R formula syntax;
- brms[4] provides a wide array of linear and nonlinear models using the R formula syntax;
- prophet provides automated procedures for time series forecasting.
Algorithms
Stan implements gradient-based Markov chain Monte Carlo (MCMC) algorithms for Bayesian inference, stochastic, gradient-based variational Bayesian methods for approximate Bayesian inference, and gradient-based optimization for penalized maximum likelihood estimation.
- MCMC algorithms:
- Hamiltonian Monte Carlo (HMC)
- No-U-Turn sampler[1][5] (NUTS), a variant of HMC and Stan's default MCMC engine
- Variational inference algorithms:
- Optimization algorithms:
- Limited-memory BFGS (Stan's default optimization algorithm)
- Broyden–Fletcher–Goldfarb–Shanno algorithm
- Laplace's approximation for classical standard error estimates and approximate Bayesian posteriors
Automatic differentiation
Stan implements reverse-mode automatic differentiation to calculate gradients of the model, which is required by HMC, NUTS, L-BFGS, BFGS, and variational inference.[1] The automatic differentiation within Stan can be used outside of the probabilistic programming language.
Usage
Stan is used in fields including social science,[8] pharmaceutical statistics,[9] market research,[10] and medical imaging.[11]
See also
- PyMC is a probabilistic programming language in Python
- ArviZ a Python library for Exploratory Analysis of Bayesian Models
References
Further reading
- Template:Cite journal
- Gelman, Andrew, Daniel Lee, and Jiqiang Guo (2015). Stan: A probabilistic programming language for Bayesian inference and optimization, Journal of Educational and Behavioral Statistics.
- Hoffman, Matthew D., Bob Carpenter, and Andrew Gelman (2012). Stan, scalable software for Bayesian modeling Template:Webarchive, Proceedings of the NIPS Workshop on Probabilistic Programming.
External links
- Stan web site
- Stan source, a Git repository hosted on GitHub
- ↑ 1.0 1.1 1.2 1.3 1.4 Stan Development Team. 2015. Stan Modeling Language User's Guide and Reference Manual, Version 2.9.0
- ↑ Template:Cite news
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite journal
- ↑ Template:Cite journal
- ↑ Template:Cite journal
- ↑ Goodrich, Benjamin King, Wawro, Gregory and Katznelson, Ira, Designing Quantitative Historical Social Inquiry: An Introduction to Stan (2012). APSA 2012 Annual Meeting Paper. Available at Template:SSRN
- ↑ Template:Cite journal
- ↑ Template:Cite web
- ↑ Template:Cite journal