PyMC
# PyMC

PyMC (anteriormente conocido como PyMC3) es un paquete de Python para el modelado estadístico bayesiano y el aprendizaje automático probabilístico. Ofrece varios algoritmos de inferencia principalmente métodos Monte Carlo vía cadena de Markov e Inferencia Variacional. PyMC ha sido reescrito desde cero de la versión anterior del software PyMC2. A diferencia de la versión anterior, que usaba extensiones de Fortran para realizar cálculos, PyMC utiliza PyTensor, una biblioteca de Python que permite definir, optimizar y evaluar de manera eficiente expresiones matemáticas que involucran arreglos multidimensionales. A partir de la versión 3.8, PyMC utiliza ArviZ para realizar gráficos, diagnóstico y evaluaciones estadísticas. PyMC y Stan son los dos lenguajes de programación probabilística más populares. PyMC es un proyecto de código abierto, desarrollado por la comunidad y patrocinado fiscalmente NumFOCUS.

PyMC se ha utilizado para resolver problemas de inferencia en varios dominios científicos, incluida la astronomía, epidemiología, biología molecular, cristalografía, química, ecología y psicología. Las versiones anteriores de PyMC también se usaron ampliamente, por ejemplo, en ciencia del clima, salud pública, neurociencia, y parasitología.

Desde que Theano anunciara planes para interrumpir su desarrollo en 2017, el equipo de PyMC evaluó TensorFlow Probability como backend computacional, pero decidió en 2020 hacerse cargo del desarrollo de Theano. Gran parte del código base de Theano se ha refactorizado y se ha añadido la compilación a través de JAX y Numba. El equipo de PyMC ha lanzado el backend computacional revisado, con el nombre de PyTensor y continúa con el desarrollo de PyMC.

## Motores de inferencia

PyMC implementa varios algoritmos de Monte Carlo (MCMC) vía cadena de Markov basados en gradientes y no basados en gradientes para la inferencia Bayesiana y métodos variacionales basados en gradientes.

* Algoritmos basados en MCMC:
   * No-U-Turn Sampler (NUTS) es un tipo de Hamiltonian Monte Carlo, y es el motor predeterminado de PyMC para variables continuas
   * Metropolis–Hastings, el motor predeterminado de PyMC para variables discretas
   * Monte Carlo secuencial (Sequential Monte-Carlo) para posteriores estáticos y para cálculo bayesiano aproximado
* Algoritmos de inferencia variacional:
   * Inferencia variacional de caja negra
