Profile
Back to NewsBack
GitHub Trending 5 min
Reader Mode
SALib/SALib: Sensitivity Analysis Library in Python. Contains Sobol, Morris, FAST, and other methods.

SALib/SALib: Sensitivity Analysis Library in Python. Contains Sobol, Morris, FAST, and other methods.

.. 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 2002 __, 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

Chat with me