https://github.com/jaspervrugt/abc-pmc
Approximation Bayesian Computation: Population Monte Carlo in MATLAB and Python
https://github.com/jaspervrugt/abc-pmc
approximate-bayesian-computation epsilon-adaptation likelihood-free-inference model-diagnostics population-monte-carlo posterior-sampling summary-metrics transition-density
Last synced: about 1 month ago
JSON representation
Approximation Bayesian Computation: Population Monte Carlo in MATLAB and Python
- Host: GitHub
- URL: https://github.com/jaspervrugt/abc-pmc
- Owner: jaspervrugt
- License: cc0-1.0
- Created: 2023-03-03T01:45:19.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2025-03-04T07:15:52.000Z (about 1 year ago)
- Last Synced: 2025-03-04T07:35:37.863Z (about 1 year ago)
- Topics: approximate-bayesian-computation, epsilon-adaptation, likelihood-free-inference, model-diagnostics, population-monte-carlo, posterior-sampling, summary-metrics, transition-density
- Language: Python
- Homepage:
- Size: 327 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ABC-PMC: Population Monte Carlo Sampler of Hydrograph Signatures in MATLAB and Python
## Description
Approximate Bayesian Computation avoids the use of an explicit likelihood function in favor a (number of) summary statistics that measure the distance between the model simulation and the data. This ABC approach is a vehicle for diagnostic model calibration and evaluation for the purpose of learning and model correction. The ABC-PMC toolbox in MATLAB and Python implements the Population Monte Carlo sampler to approximate the posterior distribution of the summary metrics using the distance function $\rho(\cdot)$ and sequence of successively smaller epsilon values, $\epsilon_{1},\ldots,epsilon_{J}$. Samples are accepted if $\rho(\cdot) \leq \epsilon$. The PMC sampler starts out as ABC-REJ during the first iteration, $j = 1$, but using a much larger initial value for $\epsilon$, the acceptance threshold. During each successive next step (iteration), $j = (2,\ldots,J)$, the value of $\epsilon$ is decreased and the proposal distribution, $q_{j}(\theta_{k}^{j−1},\cdot) = N_{d}(\theta_{k}^{j−1},\Sigma^{j})$ adapted using $\Sigma^{j} = \text{Cov}(\theta_{1}^{j−1},\ldots,\theta_{N}^{j−1})$ with $\theta_{k}$ drawn from a multinomial distribution, $F(\theta_{1:N}^{j−1} \vert w_{1:N}^{j-1})$ where $w_{1:N}^{j-1}$ are the posterior weights $(w_{l}^{j-1} \geq 0; \sum_{l=1}^{N} w_{l}^{j-1} = 1)$. Through a sequence of successive (multi)normal proposal distributions, the prior sample is thus iteratively refined until a sample of the posterior distribution is obtained. This approach, similar in spirit to the adaptive Metropolis sampler of Haario et al. (1999, 2001), receives a much higher sampling efficiency than ABC-REJ, particularly for cases where the prior sampling distribution $p(\theta)$ is a poor approximation of the posterior distribution. Details of the ABC-PMC procedure are given in Appendix B of Sadegh and Vrugt (2013). Another significant improvement in efficiency is obtained from MCMC simulation using the DREAM$_{(ABC)}$ algorithm of Sadegh and Vrugt (2014). This code is part of DREAM-Suite.
## Getting Started
### Installing: MATLAB
* Download and unzip the zip file 'MATLAB_code_ABC_PMC_V1.0.zip' in a directory 'ABC_PMC'
* Add the toolbox to your MATLAB search path by running the script 'install_ABC_PMC.m' available in the root directory
* You are ready to run the built-in examples
### Executing program
* After intalling, you can simply direct to each example folder and execute the local 'example_X.m' file
* Please make sure you read carefully the instructions (i.e., green comments) in 'install_ABC_PMC.m'
### Installing: Python
* Download and unzip the zip file 'Python_code_ABC_PMC_V1.0.zip' to a directory called 'ABC_PMC'
### Executing program
* Go to Command Prompt and directory of example_X in the root of ABC_PMC
* Now you can execute this example by typing "python example_X.py".
* Instructions can be found in the file 'ABC_PMC.py'
## Authors
* Vrugt, Jasper A. (jasper@uci.edu)
## Literature
1. Turner, B.M, and T. van Zandt (2012), A tutorial on approximate Bayesian computation, _Journal of Mathematical Psychology_, 56, pp. 69-85
2. Sadegh, M., and J.A. Vrugt (2014), Approximate Bayesian computation using Markov chain Monte Carlo simulation: DREAM_(ABC), _Water Resources Research_, https://doi.org/10.1002/2014WR015386
3. Vrugt, J.A., and M. Sadegh (2013), Toward diagnostic model calibration and evaluation: Approximate Bayesian computation, _Water Resources Research_, 49, pp. 4335–4345, https://doi.org/10.1002/wrcr.20354
4. Sadegh, M., and J.A. Vrugt (2013), Bridging the gap between GLUE and formal statistical approaches: approximate Bayesian computation, _Hydrology and Earth System Sciences_, 17, pp. 4831–4850
5. Sisson, S.A., Y. Fan, and M.M. Tanaka (2007), Sequential Monte Carlo without likelihoods, _Proceedings of the National Academy of Sciences of the United States of America_, 104(6), pp. 1760-1765, https://doi.org/10.1073/pnas.0607208104
## Version History
* 1.0
* Initial Release
* Built-in Case Studies
* Basic Postprocessing
* Python Implementation
## Built-in Case Studies
1. Example 1: Toy example from Sisson et al. (2007)
2. Example 2: Linear regression example from Vrugt and Sadegh (2013)
3. Example 3: Hydrologic modeling using hydrograph functionals
## Acknowledgments