| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
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
Contributing: see here
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:
from SALib.util import read_param_file
problem = read_param_file('/path/to/file.txt')
# ... same as aboveLots of other options are included for parameter files, as well as a command-line interface. See the advanced section in the documentation.
Chaining calls is supported from SALib v1.4
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.
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
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}
}
Many projects now use the Global Sensitivity Analysis features provided by SALib. Here is a selection:
If you would like to be added to this list, please submit a pull request, or create an issue.
Many thanks for using SALib.
See here for how to contribute to SALib.
Copyright (C) 2012-2019 Jon Herman, Will Usher, and others. Versions v0.5 and later are released under the MIT license.
| Back | FazBrowse Home | New Git URL |