Fit and compare complex models reliably and rapidly. Advanced Nested Sampling.
Project description
UltraNest
Fit and compare complex models reliably and rapidly with advanced sampling techniques.
Correctness. Speed. Ease of use. 🦔
About
When scientific models are compared to data, two tasks are important: 1) contraining the model parameters and 2) comparing the model to other models. Different techniques have been developed to explore model parameter spaces. This package implements a Monte Carlo technique called nested sampling.
Nested sampling allows Bayesian inference on arbitrary user-defined likelihoods. In particular, posterior probability distributions on model parameters are constructed, and the marginal likelihood (“evidence”) Z is computed. The former can be used to describe the parameter constraints of the data, the latter can be used for model comparison (via Bayes factors) as a measure of the prediction parsimony of a model.
In the last decade, multiple variants of nested sampling have been developed. These differ in how nested sampling finds better and better fits while respecting the priors (constrained likelihood prior sampling techniques), and whether it is allowed to go back to worse fits and explore the parameter space more.
This package develops novel, advanced techniques for both (See How it works). They are especially remarkable for being free of tuning parameters and theoretically justified. Beyond that, UltraNest has support for Big Data sets and high-performance computing applications.
UltraNest is intended for fitting complex physical models with slow likelihood evaluations, with one to hundreds of parameters. UltraNest intends to replace heuristic methods like multi-ellipsoid nested sampling and dynamic nested sampling with more rigorous methods. UltraNest also attempts to provide feature parity compared to other packages (such as MultiNest).
You can help by testing UltraNest and reporting issues. Code contributions are welcome. See the Contributing page.
Features
Pythonic
pip and conda installable
Easy to program for: Sanity checks with meaningful errors
Can control the run programmatically and check status
Reasonable defaults, but customizable
Thoroughly tested with many unit and integration tests
NEW: allows likelihood functions written in Python, C, C++, Fortran, Julia and R
Robust exploration easily handles:
Degenerate parameter spaces such as bananas or tight correlations
Multiple modes/solutions in the parameter space
Robust, parameter-free MLFriends algorithm (metric learning RadFriends, Buchner+14,+19), with new improvements (region follows new live points, clustering improves metric iteratively).
High-dimensional problems with hit-and-run sampling
Wrapped/circular parameters, derived parameters
Fast-slow parameters
strategic nested sampling
can vary (increase) number of live points (akin to dynamic nested sampling, but with different targets)
can sample clusters optimally (e.g., at least 50 points per cluster/mode/solution)
can target minimizing parameter estimation uncertainties
can target a desired evidence uncertainty threshold
can target a desired number of effective samples
or any combination of the above
Robust ln(Z) uncertainties by bootstrapping live points.
Lightweight and fast
some functions implemented in Cython
Use multiple cores, fully parallelizable from laptops to computing clusters
Advanced visualisation and crash recovery:
Live view of the exploration for Jupyter notebooks and terminals
Publication-ready visualisations
Corner plots, run and parameter exploration diagnostic plots
Checkpointing and resuming, even with different number of live points
Usage
Read the full documentation with tutorials at:
https://johannesbuchner.github.io/UltraNest/
Code repository: https://github.com/JohannesBuchner/UltraNest/
Licence
How to cite UltraNest.
GPLv3 (see LICENCE file). If you require another license, please contact me.
The cute hedgehog icon was made by Freepik.
Release Notes
3.4.0 (2022-04-05)
add differential evolution proposal for slice sampling, recommend it
fix revert of step sampler when run out of constraint, in MPI
add SimpleRegion: axis-aligned ellipsoidal for very high-d.
3.3.3 (2021-09-17)
pretty marginal posterior plot to stdout
avoid non-terminations when logzerr cannot be reached
add RobustEllipsoidRegion: ellipsoidal without MLFriends for high-d.
add WrappingEllipsoid: for additional rejection.
bug fixes on rank order test
add resume-similar
modular step samplers
3.0.0 (2020-10-03)
Accelerated Hit-and-Run Sampler added
Support for other languages (C, C++, Julia, Fortran) added
Insertion order test added
Warm-start added
Rejection sampling with transformed ellipsoid added
2.2.0 (2020-02-07)
allow reading UltraNest outputs without ReactiveNestedSampler instance
2.1.0 (2020-02-07)
adaptive number of steps for slice and hit-and-run samplers.
2.0.0 (2019-10-03)
First release.
1.0.0 (2014)
A simpler version referenced in Buchner et al. (2014), combining RadFriends with an optional Metropolis-Hastings proposal.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file ultranest-3.4.3.tar.gz
.
File metadata
- Download URL: ultranest-3.4.3.tar.gz
- Upload date:
- Size: 21.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.30.0 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a2db5a775fff4915c6406c1267550ca7286e7d46a1ba48a2caf0fd8a4e9dd214 |
|
MD5 | 7dcecd28c927bbd1737d7f83fecb053b |
|
BLAKE2b-256 | 20fe3bca9794b3760bc78499f16d161ae47aa0c5a0dfb5f880b6fe69ffe81188 |