A Statistical Parameter Optimization Tool

## Purpose

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
```

## Features

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`)
• 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-Sutcliff (`NSE`)
• logarithmic Nash-Sutcliff (`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`)
• 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

Documentation is available at http://fb09-pasig.umwelt.uni-giessen.de/spotpy

## Install

Installing SPOTPY is easy. Just use:

pip install spotpy

python setup.py install

## Support

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

## Contributing

Patches/enhancements/new algorithms and any other contributions to this package are very welcome!

1. Fork it ( http://github.com/thouska/spotpy/fork )
2. Create your feature branch (git checkout -b my-new-feature)
6. Push to the branch (git push origin my-new-feature)
7. Create new Pull Request