L-Moments for robust statistics.
Project description
Lmo - Trimmed L-moments and L-comoments
Is your tail too heavy?
Can't find a moment?
Are the swans black?
The distribution pathological?
... then look no further: Lmo's got you covered!
Uniform or multi-dimensional, Lmo can summarize it all with one quick glance!
Unlike the legacy moments, L-moments uniquely describe a probability distribution, and are more robust and efficient. The "L" stands for Linear; it is a linear combination of order statistics. So Lmo is as fast as sorting your samples (in terms of time-complexity).
Key Features
- Calculates trimmed L-moments and L-comoments, from samples or any
scipy.stats
distribution. - Full support for trimmed L-moment (TL-moments), e.g.
lmo.l_moment(..., trim=(1/137, 3.1416))
. - Generalized Method of L-moments: robust distribution fitting that beats MLE.
- Fast estimation of L-comoment matrices from your multidimensional data or multivariate distribution.
- Goodness-of-fit test, using L-moment or L-moment ratio's.
- Non-parametric estimation of continuous distributions
with
lmo.l_rv_nonparametric
- Exact (co)variance structure of the sample- and population L-moments.
- Theoretical & empirical influence functions of L-moments & L-ratio's.
- Complete docs, including detailed API reference with usage examples and with mathematical $\TeX$ definitions.
- Clean Pythonic syntax for ease of use.
- Vectorized functions for very fast fitting.
- Fully typed, tested, and tickled.
- Optional Pandas integration.
Quick example
Even if your data is pathological like Cauchy, and the L-moments are not defined, the trimmed L-moments (TL-moments) can be used instead. Let's calculate the TL-location and TL-scale of a small amount of samples:
>>> import numpy as np
>>> import lmo
>>> rng = np.random.default_rng(1980)
>>> x = rng.standard_cauchy(96) # pickle me, Lmo
>>> lmo.l_moment(x, [1, 2], trim=(1, 1)).
array([-0.17937038, 0.68287665])
Now compare with the theoretical standard Cauchy TL-moments:
>>> from scipy.stats import cauchy
>>> cauchy.l_moment([1, 2], trim=(1, 1))
array([0. , 0.69782723])
See the documentation for more examples and the API reference.
Roadmap
- Automatic trim-length selection.
- Plotting utilities (deps optional), e.g. for L-moment ratio diagrams.
Installation
Lmo is on PyPI, so you can do something like:
pip install lmo
Required dependencies
These are automatically installed by your package manager, alongside lmo
.
Package | Minimum version |
---|---|
Python | 3.10 |
NumPy | 1.22 |
SciPy | 1.9 |
Optional dependencies
Package | Minimum version | Notes |
---|---|---|
Pandas | 1.4 |
Lmo extends pd.Series and pd.DataFrame with convenient methods, e.g. df.l_scale(trim=1) . Install as pip install lmo[pandas] to ensure compatibility. |
Foundational Literature
- J.R.M. Hosking (1990) – L-moments: Analysis and Estimation of Distributions using Linear Combinations of Order Statistics
- E.A.H. Elamir & A.H. Seheult (2003) – Trimmed L-moments
- E.A.H. Elamir & A.H. Seheult (2004) – Exact variance structure of sample L-moments
- J.R.M. Hosking (2007) – Some theory and practical uses of trimmed L-moments
- R. Serfling & P. Xiao (2007) – A contribution to multivariate L-moments: L-comoment matrices
- W.H. Asquith (2011) – Univariate Distributional Analysis with L-moment Statistics
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.