A Statistical Parameter Optimization Tool for Python
SPOTPY is a Python tool that enables the use of Computational optimization techniques for calibration, uncertainty and sensitivity analysis techniques of almost every (environmental-) model. The package is puplished in the open source journal PLoS One
Houska, T, Kraft, P, Chamorro-Chavez, A and Breuer, L; SPOTting Model Parameters Using a Ready-Made Python Package; PLoS ONE; 2015
The simplicity and flexibility enables the use and test of different algorithms without the need of complex codes:
sampler = spotpy.algorithms.sceua(model_setup()) # Initialize your model with a setup file sampler.sample(10000) # Run the model results = sampler.getdata() # Load the results spotpy.analyser.plot_parametertrace(results) # Show the results
Complex formal Bayesian informal Bayesian and non-Bayesian algorithms bring complex tasks to link them with a given model. We want to make this task as easy as possible. Some features you can use with the SPOTPY package are:
- Fitting models to evaluation data with different algorithms.
Available algorithms are:
- Monte Carlo (MC)
- Markov-Chain Monte-Carlo (MCMC)
- Maximum Likelihood Estimation (MLE)
- Latin-Hypercube Sampling (LHS)
- Simulated Annealing (SA)
- Shuffled Complex Evolution Algorithm (SCE-UA)
- Differential Evolution Markov Chain Algorithm (DE-MCz)
- Differential Evolution Adaptive Metropolis Algorithm (DREAM)
- RObust Parameter Estimation (ROPE)
- Fourier Amplitude Sensitivity Test (FAST)
- Artificial Bee Colony (ABC)
- Fitness Scaled Chaotic Artificial Bee Colony (FSCABC)
- Dynamically Dimensioned Search algorithm (DDS)
- Pareto Archived - Dynamicallly Dimensioned Search algorithm (PA-DDS)
- Fast and Elitist Multiobjective Genetic Algorithm (NSGA-II)
- Wide range of objective functions (also known as loss function, fitness function or energy function) to validate the sampled results. Available functions are
- Bias
- Procentual Bias (PBias)
- Nash-Sutcliffe (NSE)
- logarithmic Nash-Sutcliffe (logNSE)
- logarithmic probability (logp)
- Correlation Coefficient (r)
- Coefficient of Determination (r^2)
- Mean Squared Error (MSE)
- Root Mean Squared Error (RMSE)
- Mean Absolute Error (MAE)
- Relative Root Mean Squared Error (RRMSE)
- Agreement Index (AI)
- Covariance, Decomposed MSE (dMSE)
- Kling-Gupta Efficiency (KGE)
- Non parametric Kling-Gupta Efficiency (KGE_non_parametric)
- Wide range of likelihood functions to validate the sampled results:
- logLikelihood
- Gaussian Likelihood to account for Measurement Errors
- Gaussian Likelihood to account for Heteroscedasticity
- Likelihood to accounr for Autocorrelation
- Generalized Likelihood Function
- Lapacian Likelihood
- Skewed Student Likelihood assuming homoscedasticity
- Skewed Student Likelihood assuming heteroscedasticity
- Skewed Student Likelihood assuming heteroscedasticity and Autocorrelation
- Noisy ABC Gaussian Likelihood
- ABC Boxcar Likelihood
- Limits Of Acceptability
- Inverse Error Variance Shaping Factor
- Nash Sutcliffe Efficiency Shaping Factor
- Exponential Transform Shaping Factor
- Sum of Absolute Error Residuals
- Wide range of hydrological signatures functions to validate the sampled results:
- Slope
- Flooding/Drought events
- Flood/Drought frequency
- Flood/Drought duration
- Flood/Drought variance
- Mean flow
- Median flow
- Skewness
- compare percentiles of discharge
- Prebuild parameter distribution functions:
- Uniform
- Normal
- logNormal
- Chisquare
- Exponential
- Gamma
- Wald
- Weilbull
- Wide range to adapt algorithms to perform uncertainty-, sensitivity analysis or calibration of a model.
- Multi-objective support
- MPI support for fast parallel computing
- A progress bar monitoring the sampling loops. Enables you to plan your coffee brakes.
- Use of NumPy functions as often as possible. This makes your coffee brakes short.
- Different databases solutions: ram storage for fast sampling a simple , csv tables the save solution for long duration samplings and a sql database for larger projects.
- Automatic best run selecting and plotting
- Parameter trace plotting
- Parameter interaction plot including the Gaussian-kde function
- Regression analysis between simulation and evaluation data
- Posterior distribution plot
- Convergence diagnostics with Gelman-Rubin and the Geweke plot
Documentation is available at https://spotpy.readthedocs.io/en/latest
Classical Python options exist to install SPOTPY:
From PyPi:
pip install spotpy
From Conda-Forge:
conda config --add channels conda-forge conda config --set channel_priority strict conda install spotpy
From [Source](https://pypi.python.org/pypi/spotpy):
python setup.py install
See Google Scholar for a continuously updated list.
- Feel free to contact the authors of this tool for any support questions.
- If you use this package for a scientific research paper, please cite SPOTPY.
- Please report any bug through mail or GitHub: https://github.com/thouska/spotpy.
- If you want to share your code with others, you are welcome to do this through GitHub: https://github.com/thouska/spotpy.
Patches/enhancements/new algorithms and any other contributions to this package are very welcome!
- Fork it ( http://github.com/thouska/spotpy/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Add your modifications
- Add short summary of your modifications on
CHANGELOG.rst
- Commit your changes (
git commit -m "Add some feature"
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
Have a look at https://github.com/thouska/spotpy/tree/master/spotpy/examples and https://spotpy.readthedocs.io/en/latest/getting_started/