https://github.com/jaksle/stabledistributions.jl
Generation and estimation of stable distributions
https://github.com/jaksle/stabledistributions.jl
distribution julia statistics
Last synced: 4 months ago
JSON representation
Generation and estimation of stable distributions
- Host: GitHub
- URL: https://github.com/jaksle/stabledistributions.jl
- Owner: jaksle
- License: mit
- Created: 2024-03-12T11:43:46.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-03-18T19:00:02.000Z (over 2 years ago)
- Last Synced: 2025-07-14T17:13:08.963Z (11 months ago)
- Topics: distribution, julia, statistics
- Language: Julia
- Homepage:
- Size: 93.8 KB
- Stars: 21
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# StableDistributions.jl
Generation and estimation of the class of stable distributions (see on [Wikipedia](https://en.wikipedia.org/wiki/Stable_distribution)) in Julia. It fully complies with the interface of [Distributions.jl](https://github.com/JuliaStats/Distributions.jl) package. The algorithms are based on book John P. Nolan, "Univariate Stable Distributions", Springer 2020 and related publications of John P. Nolan.
## Defining stable distribution
This package uses the so-called type-1 parametrisation determined by:
- stability index 0 < α ≤ 2,
- skewness parameter -1 ≤ β ≤ 1,
- scale 0 < σ,
- location μ
Such distribution is uniquely characterised by its characteristic function (Fourier transform of its pdf)
```math
\varphi(t; \alpha, \beta, \sigma, \mu) = \exp\big(\mathrm i t\mu -|\sigma t|^\alpha(1-\mathrm i\beta\mathrm{sgn}(t)\Phi(t))\big)
```
with $\Phi(t) = -\frac{2}{\pi}\log|t|$ for α = 1 or $\Phi(t) = \tan(\pi\alpha/2)$ for α ≠ 1.
To construct stable distribution one can use:
- `Stable(α)` for standard symmetric α-stable distribution equivalent to Stable(α, 0, 1, 0),
- `Stable(α, β)` for standard α-stable distribution with skewness parameter β equivalent to Stable(α, β, 1, 0),
- `Stable(α, β, σ, μ)` in general case.
## Generating values from stable distribution
One can use standard functions `rand(d::Stable)` for one value or `rand(d::Stable, shape)` for a series of values formatted with a given shape.
## Utility functions
Probability density function `pdf`, comultative probability function `cdf`, moment generating function `mgf`, characteristic function `cf` and quantiles `quantile`, and few ralated functions are also available. Values of `pdf`, `cdf` and `quantile` are approximate and based on numerical approximations of the corresponding integral representions and additional numerical function inversion for `quantile`. For example, `pdf(Stable(1.5), 2)` returns pdf of `Stable(1.5)` at point x = 2 which is approximately `0.084`.
One can multiply stable distributions by scalars and add them, e.g. `2Stable(1.5) + 3` is a valid code which returns `Stable(1.5, 0, 2, 3)`. Function `convolve` is used to convolve two stable distributions with the same α, which is a distribution of the sum of two indepedent stable variables with such distributions. For example `convolve(Stable(0.5,1), Stable(0.5,0,2,1))` gives approximately `Stable(0.5, 0.41, 5.83, 1)`. Function `support` returns support of a given stable distribution, which can be half-bounded for skewed stable distribution with β = 1 or β = -1 and α < 1.
Method `convert` can be used to convert from special cases of Lévy, Cauchy and Gaussian to stable distributions. For example, `convert(Stable,Normal(0,1))` returns equivalent of `Stable(2, 0, √2/2, 1)`.
## Fitting
Given data sample one can find best fitting stable distribution using method `fit(Stable, sample)`. It uses algorithm based on finding parameters which best fit sample characteristic function. This methods is considered to be efficient and quick. Alternatively, one can use `fit_quantile(Stable, sample)` which uses older McCulloch's quantile method in type-0 parametrisation. This method is considered to be generally worse but can be useful for additional checks, e.g. when there are doubts about the reliability of the estimation.