statistics-incremental-0.1.0.0: incremental statistics folds

Safe HaskellSafe-Inferred
LanguageHaskell2010

Statistics.Incremental

Contents

Description

This module provides incremental statistics folds based upon the foldl library

>>> import Statistics.Incremental
>>> import qualified Control.Foldl as L

The folds represent incremental statistics such as `moving averages`.

Statistics are based on exponential-weighting schemes which enable statistics to be calculated in a streaming one-pass manner. The stream of moving averages with an exponential parameter of 0.1 is:

>>> scan (ma 0.1) [1..10]

or if you just want the moving average at the end.

>>> fold (ma 0.1) [1..10]

Synopsis

an increment between L.fold steps

data Increment Source

State

Constructors

Increment 

Fields

_adder :: !Double
 
_counter :: !Double
 
_rate :: !Double
 

Instances

incrementalize :: (a -> Double) -> Double -> Fold a Double Source

takes a function and turns it into a Foldl.Fold where the step incremental is an Increment with a step function iso to a step in an exponential moving average calculation.

>>> incrementalize id

is a moving average of a foldable

>>> incrementalize (*2)

is a moving average of the square of a foldable

This lets you build an exponential standard deviation computation (using Foldl) as

>>> std r = (\s ss -> sqrt (ss - s**2)) <$> incrementalize id r <*> incrementalize (*2) r

An exponential moving average approach (where average id abstracted to function) represents an efficient single-pass computation that attempts to keep track of a running average of some Foldable.

The rate is the parameter regulating the discount of current state and the introduction of the current value.

>>> incrementalize id 1

tracks the sum/average of an entire Foldable.

>>> incrementalize id 0

produces the latest value (ie current state is discounted to zero)

A exponential moving average with a duration of 10 (the average lag of the values effecting the calculation) is

>>> incrementalize id (1/10)

convenience folds

incMa :: Double -> Fold Double Double Source

convenience folds

scan :: Foldable f => Fold a b -> f a -> [b] Source

Scanning