.. image:: https://raw.githubusercontent.com/SALib/SALib/main/docs/assets/logo.png :width: 232px :align: center
Sensitivity Analysis Library (SALib) ====================================
Python implementations of commonly used sensitivity analysis methods. Useful in systems modeling to calculate the effects of model inputs or exogenous factors on outputs of interest.
Documentation: ReadTheDocs __
Requirements: NumPy __,
SciPy __,
matplotlib __,
pandas __,
Python 3 (from SALib v1.2 onwards SALib does not officially support Python 2)
Installation: `pip install SALib or pip install . or conda install SALib
Build Status: |Build Status| Test Coverage: |Coverage Status|
Included methods ----------------
- Sobol Sensitivity Analysis (Sobol 2001
__,
__,
Saltelli et al. 2010 __)
- Method of Morris, including groups and optimal trajectories (
Morris 1991 __,
Campolongo et al. 2007 __,
Ruano et al. 2012 __)
- extended Fourier Amplitude Sensitivity Test (eFAST) (
Cukier et al. 1973 __, Saltelli et al. 1999 __, Pujol (2006) in Iooss et al., (2021) __)
- Random Balance Designs - Fourier Amplitude Sensitivity Test (RBD-FAST) (
Tarantola et al. 2006 __, Plischke 2010 __,
Tissot et al. 2012 __)
- Delta
Moment-Independent Measure (Borgonovo 2007 __,
Plischke et al. 2013 __)
- Derivative-based Global Sensitivity Measure (DGSM) (
Sobol and Kucherenko 2009 __)
- Shapley Effects (
Goda 2021 __)
- Fractional Factorial Sensitivity Analysis
(Saltelli et al. 2008 __)
- High-Dimensional Model Representation (HDMR)
(Rabitz et al. 1999 __, Li et al. 2010 __)
- PAWN (
Pianosi and Wagener 2018 __, Pianosi and Wagener 2015 __)
- Regional Sensitivity Analysis (based on
Hornberger and Spear, 1981 __, Saltelli et al. 2008 __, Pianosi et al., 2016 __)
Contributing: see
here __
Quick Start
-----------
Procedural approach
~~~~~~~~~~~~~~~~~~~
.. code:: python
from SALib.sample import saltelli
from SALib.analyze import sobol
from SALib.test_functions import Ishigami
import numpy as np
problem = {
'num_vars': 3,
'names': ['x1', 'x2', 'x3'],
'bounds': [[-np.pi, np.pi]]*3
}
# Generate samples
param_values = saltelli.sample(problem, 1024)
# Run model (example)
Y = Ishigami.evaluate(param_values)
# Perform analysis
Si = sobol.analyze(problem, Y, print_to_console=True)
# Returns a dictionary with keys 'S1', 'S1_conf', 'ST', and 'ST_conf'
# (first and total-order indices with bootstrap confidence intervals)
It's also possible to specify the parameter bounds in a file with 3
columns:
::
# name lower_bound upper_bound
P1 0.0 1.0
P2 0.0 5.0
...etc.
Then the
problem dictionary above can be created from the
read_param_file function:
.. code:: python
from SALib.util import read_param_file
problem = read_param_file('/path/to/file.txt')
# ... same as above
Lots of other options are included for parameter files, as well as a
command-line interface. See the
advanced
section in the documentation __.
Method chaining approach
~~~~~~~~~~~~~~~~~~~~~~~~
Chaining calls is supported from SALib v1.4
.. code:: python
from SALib import ProblemSpec
from SALib.test_functions import Ishigami
import numpy as np
# By convention, we assign to "sp" (for "SALib Problem")
sp = ProblemSpec({
'names': ['x1', 'x2', 'x3'], # Name of each parameter
'bounds': [[-np.pi, np.pi]]*3, # bounds of each parameter
'outputs': ['Y'] # name of outputs in expected order
})
(sp.sample_saltelli(1024, calc_second_order=True)
.evaluate(Ishigami.evaluate)
.analyze_sobol(print_to_console=True))
print(sp)
# Samples, model results and analyses can be extracted:
print(sp.samples)
print(sp.results)
print(sp.analysis)
# Basic plotting functionality is also provided
sp.plot()
The above is equivalent to the procedural approach shown previously.
Also check out the
FAQ __ and
examples __ for a
full description of options for each method.
How to cite SALib
-----------------
If you would like to use our software, please cite it using the following:
Iwanaga, T., Usher, W., & Herman, J. (2022).
Toward SALib 2.0: Advancing the accessibility and interpretability of global sensitivity analyses.
Socio-Environmental Systems Modelling, 4, 18155.
doi:10.18174/sesmo.18155
Herman, J. and Usher, W. (2017) SALib: An open-source Python library for
sensitivity analysis. Journal of Open Source Software, 2(9).
doi:10.21105/joss.00097
|paper status|
If you use BibTeX, cite using the following entries::
@article{Iwanaga2022,
title = {Toward {SALib} 2.0: {Advancing} the accessibility and interpretability of global sensitivity analyses},
volume = {4},
url = {https://sesmo.org/article/view/18155},
doi = {10.18174/sesmo.18155},
journal = {Socio-Environmental Systems Modelling},
author = {Iwanaga, Takuya and Usher, William and Herman, Jonathan},
month = may,
year = {2022},
pages = {18155},
}
@article{Herman2017,
doi = {10.21105/joss.00097},
url = {https://doi.org/10.21105/joss.00097},
year = {2017},
month = {jan},
publisher = {The Open Journal},
volume = {2},
number = {9},
author = {Jon Herman and Will Usher},
title = {{SALib}: An open-source Python library for Sensitivity Analysis},
journal = {The Journal of Open Source Software}
}
Projects that use SALib
-----------------------
Many projects now use the Global Sensitivity Analysis features provided by
SALib. Here is a selection:
Software
~~~~~~~~
The City Energy Analyst _
pynoddy _
savvy _
rhodium _
pySur _
EMA workbench _
Brain/Circulation Model Developer _
DAE Tools _
agentpy _
uncertainpy _
CLIMADA _
Blogs
~~~~~
Sensitivity Analysis in Python _
Sensitivity Analysis with SALib _
Running Sobol using SALib _
Extensions of SALib for more complex sensitivity analyses _
Videos
~~~~~~
PyData Presentation on SALib _
If you would like to be added to this list, please submit a pull request,
or create an issue.
Many thanks for using SALib.
How to contribute
-----------------
See
here __ for how to contribute to SALib.
License
-------
Copyright (C) 2012-2019 Jon Herman, Will Usher, and others. Versions v0.5 and
later are released under the
MIT license .. |Build Status| image:: https://travis-ci.com/SALib/SALib.svg?branch=master :target: https://travis-ci.com/SALib/SALib .. |Coverage Status| image:: https://img.shields.io/coveralls/SALib/SALib.svg :target: https://coveralls.io/r/SALib/SALib .. |Code Issues| image:: https://www.quantifiedcode.com/api/v1/project/ed62e70f899e4ec8af4ea6b2212d4b30/badge.svg :target: https://www.quantifiedcode.com/app/project/ed62e70f899e4ec8af4ea6b2212d4b30 .. |paper status| image:: http://joss.theoj.org/papers/431262803744581c1d4b6a95892d3343/status.svg :target: http://joss.theoj.org/papers/431262803744581c1d4b6a95892d3343