Skip to content

amicol/SALib

 
 

Repository files navigation

##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.

Requirements: NumPy, SciPy, Scikit-learn

Installation: pip install SALib or python setup.py install

Build Status: Build Status Test Coverage: Coverage Status

Methods included:

Contributors: Jon Herman, Chris Mutel, Will Usher, Matt Woodruff, Fernando Rios, Dan Hyams, xantares

Create a parameter file

To get started, create a file describing the sampling ranges for the parameters in the model. Parameter files should be created with 3 columns: [name, lower bound, upper bound]:

P1 0.0 1.0
P2 0.0 5.0
...etc.

Lines beginning with # will be treated as comments and ignored.

Create a group file (if using Morris)

Create a file describing the grouping of parameters in the model. Group files should be created with row equal to the number of groups desired.

Group 1,P1,P2,P3
Group 2,P4,P5
Group 3,P6
...etc.

Generate samples

From the command line:

python -m SALib.sample.saltelli \
     -n 1000 \
     -p ./SALib/test_functions/params/Ishigami.txt \
     -o model_input.txt \

Other methods include SALib.sample.morris and SALib.sample.fast_sampler. For an explanation of all command line options, see the examples here.

Or, generate samples from Python:

from SALib.sample import saltelli
import numpy as np

param_file = '../../SALib/test_functions/params/Ishigami.txt'
param_values = saltelli.sample(1000, param_file, calc_second_order = True)
np.savetxt('model_input.txt', param_values, delimiter=' ')

Either way, this will create a file of sampled input values in model_input.txt.

Run model

Here's an example of running a test function in Python, but this will usually be a user-defined model, maybe even in another language. Just save the outputs.

from SALib.test_functions import Ishigami
Y = Ishigami.evaluate(param_values)
np.savetxt('model_output.txt', Y, delimiter=' ')

Analyze model output

From the command line:

python -m SALib.analyze.sobol \
     -p ./SALib/test_functions/params/Ishigami.txt \
     -Y model_output.txt \
     -c 0 \

This will print indices and confidence intervals to the command line. You can redirect to a file using the > operator.

Or, from Python:

from SALib.analyze import sobol
import numpy as np
Si = sobol.analyze(param_file, 'model_output.txt', column = 0, print_to_console=False)
# Returns a dictionary with keys 'S1', 'S1_conf', 'ST', and 'ST_conf'
# e.g. Si['S1'] contains the first-order index for each parameter, in the same order as the parameter file

Check out the examples for a full description of command line and keyword options for all of the methods.

License

Copyright (C) 2013-2014 Jon Herman and others. Licensed under the GNU Lesser General Public License.

The Sensitivity Analysis Library is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

The Sensitivity Analysis Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with the Sensitivity Analysis Library. If not, see http://www.gnu.org/licenses/.

About

Sensitivity Analysis Library in Python (Numpy). Contains Sobol, Morris, and FAST methods.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 99.5%
  • Shell 0.5%