Lenguaje de programación probabilística para inferencia bayesiana
Stan es un lenguaje de programación probabilístico para inferencia estadística escrito en C++ . [2] El lenguaje Stan se utiliza para especificar un modelo estadístico (bayesiano) con un programa imperativo que calcula la función de densidad de probabilidad logarítmica . [2]
Stan está licenciado bajo la Nueva Licencia BSD . El nombre de Stan se debe a Stanislaw Ulam , pionero del método Monte Carlo . [2]
Stan fue creado por un equipo de desarrollo formado por 52 miembros [3] que incluye a Andrew Gelman , Bob Carpenter, Daniel Lee, Ben Goodrich y otros.
Ejemplo
Un modelo de regresión lineal simple se puede describir como , donde . Esto también se puede expresar como . La última forma se puede escribir en Stan de la siguiente manera:
datos { int < lower = 0 > N ; vector [ N ] x ; vector [ N ] y ; } parámetros { alfa real ; beta real ; real < lower = 0 > sigma ; } modelo { y ~ normal ( alfa + beta * x , sigma ); }
Interfaces
Se puede acceder al lenguaje Stan a través de varias interfaces:
Además, se proporcionan interfaces de nivel superior con paquetes que utilizan Stan como backend, principalmente en el lenguaje R : [4]
- rstanarm proporciona un reemplazo directo para los modelos frecuentistas proporcionados por base R y lme4 utilizando la sintaxis de fórmula R;
- brms [5] proporciona una amplia gama de modelos lineales y no lineales utilizando la sintaxis de fórmula R;
- Prophet proporciona procedimientos automatizados para el pronóstico de series de tiempo .
Algoritmos
Stan implementa algoritmos de Monte Carlo de cadena de Markov basados en gradientes (MCMC) para inferencia bayesiana, métodos bayesianos variacionales estocásticos basados en gradientes para inferencia bayesiana aproximada y optimización basada en gradientes para estimación de máxima verosimilitud penalizada.
- Algoritmos MCMC:
- Hamiltoniano Monte Carlo (HMC)
- Muestreador No-U-Turn [2] [6] (NUTS), una variante del motor MCMC predeterminado de HMC y Stan
- Algoritmos de inferencia variacional:
- Inferencia variacional de diferenciación automática [7]
- Pathfinder: Inferencia variacional cuasi-Newtoniana paralela [8]
- Algoritmos de optimización:
Diferenciación automática
Stan implementa la diferenciación automática en modo inverso para calcular gradientes del modelo, lo cual es requerido por HMC, NUTS, L-BFGS, BFGS e inferencia variacional. [2] La diferenciación automática dentro de Stan se puede utilizar fuera del lenguaje de programación probabilística.
Uso
Stan se utiliza en campos que incluyen ciencias sociales, [9] estadísticas farmacéuticas , [10] investigación de mercado , [11] e imágenes médicas . [12]
Véase también
- PyMC es un lenguaje de programación probabilístico en Python
- ArviZ, una biblioteca de Python para el análisis exploratorio de modelos bayesianos
Referencias
- ^ "Versión 2.35.0". 3 de junio de 2024. Consultado el 26 de junio de 2024 .
- ^ Equipo de desarrollo de abcde Stan. 2015. Guía del usuario y manual de referencia del lenguaje de modelado Stan, versión 2.9.0
- ^ "Equipo de desarrollo". stan-dev.github.io . Consultado el 21 de noviembre de 2024 .
- ^ Gabry, Jonah. "El estado actual del ecosistema Stan en R". Modelado estadístico, inferencia causal y ciencias sociales . Consultado el 25 de agosto de 2020 .
- ^ "BRMS: modelos de regresión bayesiana utilizando 'Stan'". 23 de agosto de 2021.
- ^ Hoffman, Matthew D.; Gelman, Andrew (abril de 2014). "El muestreador sin giro en U: configuración adaptativa de longitudes de ruta en el método Monte Carlo hamiltoniano". Journal of Machine Learning Research . 15 : págs. 1593–1623.
- ^ Kucukelbir, Alp; Ranganath, Rajesh; Blei, David M. (junio de 2015). "Inferencia variacional automática en Stan". 1506 (3431). arXiv : 1506.03431 . Código Bibliográfico :2015arXiv150603431K.
- ^ Zhang, Lu; Carpenter, Bob; Gelman, Andrew; Vehtari, Aki (2022). "Pathfinder: Inferencia variacional cuasi-Newton paralela". Revista de investigación en aprendizaje automático . 23 (306): 1–49.
- ^ Goodrich, Benjamin King, Wawro, Gregory y Katznelson, Ira, Designing Quantitative Historical Social Inquiry: An Introduction to Stan (2012). Documento de la reunión anual de la APSA de 2012. Disponible en SSRN 2105531
- ^ Natanegara, Fanni; Neuenschwander, Beat; Seaman, John W.; Kinnersley, Nelson; Heilmann, Cory R.; Ohlssen, David; Rochester, George (2013). "El estado actual de los métodos bayesianos en el desarrollo de productos médicos: resultados de la encuesta y recomendaciones del Grupo de trabajo científico bayesiano de la DIA". Estadísticas farmacéuticas . 13 (1): 3–12. doi :10.1002/pst.1595. ISSN 1539-1612. PMID 24027093. S2CID 19738522.
- ^ Feit, Elea (15 de mayo de 2017). "Uso de Stan para estimar modelos bayesianos jerárquicos" . Consultado el 19 de marzo de 2019 .
- ^ Gordon, GSD; Joseph, J; Alcolea, MP; Sawyer, T; Macfaden, AJ; Williams, C; Fitzpatrick, CRM; Jones, PH; di Pietro, M; Fitzgerald, RC; Wilkinson, TD; Bohndiek, SE (2019). "Imágenes cuantitativas de fase y polarización a través de una fibra óptica aplicadas a la detección de tumorogénesis esofágica temprana". Journal of Biomedical Optics . 24 (12): 1–13. arXiv : 1811.03977 . Bibcode :2019JBO....24l6004G. doi :10.1117/1.JBO.24.12.126004. PMC 7006047 . PMID 31840442.
Lectura adicional
- Carpenter, Bob; Gelman, Andrew; Hoffman, Matthew; Lee, Daniel; Goodrich, Ben; Betancourt, Michael; Brubaker, Marcus; Guo, Jiqiang; Li, Peter; Riddell, Allen (2017). "Stan: un lenguaje de programación probabilístico". Revista de software estadístico . 76 (1): 1–32. doi : 10.18637/jss.v076.i01 . ISSN 1548-7660. PMC 9788645 . PMID 36568334.
- Gelman, Andrew, Daniel Lee y Jiqiang Guo (2015). Stan: Un lenguaje de programación probabilístico para la inferencia y optimización bayesiana, Journal of Educational and Behavioral Statistics.
- Hoffman, Matthew D., Bob Carpenter y Andrew Gelman (2012). Stan, software escalable para modelado bayesiano Archivado el 21 de enero de 2015 en Wayback Machine , Actas del Taller NIPS sobre Programación Probabilística.
Enlaces externos
- Sitio web de Stan
- Fuente de Stan, un repositorio de Git alojado en GitHub