Source code for calculus.stats.moment
# -*- coding: UTF-8 -*-
"""
:filename: sppas.src.calculus.stats.moment.py
:author: Brigitte Bigi
:contact: develop@sppas.org
:summary: A collection of basic statistical functions for python.
.. _This file is part of SPPAS: http://www.sppas.org/
..
-------------------------------------------------------------------------
___ __ __ __ ___
/ | \ | \ | \ / the automatic
\__ |__/ |__/ |___| \__ annotation and
\ | | | | \ analysis
___/ | | | | ___/ of speech
Copyright (C) 2011-2021 Brigitte Bigi
Laboratoire Parole et Langage, Aix-en-Provence, France
Use of this software is governed by the GNU Public License, version 3.
SPPAS is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SPPAS 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with SPPAS. If not, see <http://www.gnu.org/licenses/>.
This banner notice must not be removed.
-------------------------------------------------------------------------
"""
from .central import fmean
from .variability import lstdev
# ----------------------------------------------------------------------------
[docs]def lmoment(items, moment=1):
"""Calculate the r-th moment about the mean for a sample.
1/n * SUM((items(i)-mean)**r)
:param items: (list) list of data values
:param moment:
:returns: (float)
"""
if moment == 1:
return 0.
mn = fmean(items)
momentlist = [(i-mn)**moment for i in items]
return sum(momentlist) / float(len(items))
# ---------------------------------------------------------------------------
[docs]def lvariation(items):
"""Calculate the coefficient of variation of data values.
It shows the extent of variability in relation to the mean. It's a
standardized measure of dispersion: stdev / mean and returned as a
percentage.
:param items: (list) list of data values
:returns: (float)
"""
m = float(fmean(items))
if m == 0.:
return 0.
return lstdev(items) / float(fmean(items)) * 100.
# ---------------------------------------------------------------------------
[docs]def lskew(items):
"""Calculate the skewness of a distribution.
The skewness represents a measure of the asymmetry: an understanding
of the skewness of the dataset indicates whether deviations from the
mean are going to be positive or negative.
:param items: (list) list of data values
:returns: (float)
"""
return lmoment(items, 3) / pow(lmoment(items, 2), 1.5)
# ---------------------------------------------------------------------------
[docs]def lkurtosis(items):
"""Return the kurtosis of a distribution.
The kurtosis represents a measure of the "peakedness": a high kurtosis
distribution has a sharper peak and fatter tails, while a low kurtosis
distribution has a more rounded peak and thinner tails.
:param items: (list) list of data values
:returns: (float)
"""
return lmoment(items, 4) / pow(lmoment(items, 2), 2.0)