monoid-statistics-1.0.1.0: Monoids for calculation of statistics of sample

CopyrightCopyright (c) 20102017 Alexey Khudyakov <alexey.skladnoy@gmail.com>
LicenseBSD3
MaintainerAlexey Khudyakov <alexey.skladnoy@gmail.com>
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Data.Monoid.Statistics.Class

Contents

Description

 
Synopsis

Type class and helpers

class Monoid m => StatMonoid m a where Source #

This type class is used to express parallelizable constant space algorithms for calculation of statistics. By definitions statistic is some measure of sample which doesn't depend on order of elements (for example: mean, sum, number of elements, variance, etc).

For many statistics it's possible to possible to construct constant space algorithm which is expressed as fold. Additionally it's usually possible to write function which combine state of fold accumulator to get statistic for union of two samples.

Thus for such algorithm we have value which corresponds to empty sample, merge function which which corresponds to merging of two samples, and single step of fold. Last one allows to evaluate statistic given data sample and first two form a monoid and allow parallelization: split data into parts, build estimate for each by folding and then merge them using mappend.

Instance must satisfy following laws. If floating point arithmetics is used then equality should be understood as approximate.

1. addValue (addValue y mempty) x  == addValue mempty x <> addValue mempty y
2. x <> y == y <> x

Minimal complete definition

addValue | singletonMonoid

Methods

addValue :: m -> a -> m Source #

Add one element to monoid accumulator. It's step of fold.

singletonMonoid :: a -> m Source #

State of accumulator corresponding to 1-element sample.

Instances
Real a => StatMonoid KBNSum a Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Real a => StatMonoid KahanSum a Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

StatMonoid BinomAcc Bool Source # 
Instance details

Defined in Data.Monoid.Statistics.Numeric

a ~ Double => StatMonoid MaxD a Source # 
Instance details

Defined in Data.Monoid.Statistics.Numeric

Methods

addValue :: MaxD -> a -> MaxD Source #

singletonMonoid :: a -> MaxD Source #

a ~ Double => StatMonoid MinD a Source # 
Instance details

Defined in Data.Monoid.Statistics.Numeric

Methods

addValue :: MinD -> a -> MinD Source #

singletonMonoid :: a -> MinD Source #

Real a => StatMonoid Variance a Source # 
Instance details

Defined in Data.Monoid.Statistics.Numeric

Real a => StatMonoid WelfordMean a Source #

\[ s_n = s_{n-1} + \frac{x_n - s_{n-1}}{n} \]

Instance details

Defined in Data.Monoid.Statistics.Numeric

Real a => StatMonoid MeanKBN a Source # 
Instance details

Defined in Data.Monoid.Statistics.Numeric

Real a => StatMonoid MeanKahan a Source # 
Instance details

Defined in Data.Monoid.Statistics.Numeric

(Num a, a ~ a') => StatMonoid (Sum a) a' Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Methods

addValue :: Sum a -> a' -> Sum a Source #

singletonMonoid :: a' -> Sum a Source #

(Num a, a ~ a') => StatMonoid (Product a) a' Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Methods

addValue :: Product a -> a' -> Product a Source #

singletonMonoid :: a' -> Product a Source #

(Ord a, a ~ a') => StatMonoid (Max a) a' Source # 
Instance details

Defined in Data.Monoid.Statistics.Numeric

Methods

addValue :: Max a -> a' -> Max a Source #

singletonMonoid :: a' -> Max a Source #

(Ord a, a ~ a') => StatMonoid (Min a) a' Source # 
Instance details

Defined in Data.Monoid.Statistics.Numeric

Methods

addValue :: Min a -> a' -> Min a Source #

singletonMonoid :: a' -> Min a Source #

Integral a => StatMonoid (CountG a) b Source # 
Instance details

Defined in Data.Monoid.Statistics.Numeric

Methods

addValue :: CountG a -> b -> CountG a Source #

singletonMonoid :: b -> CountG a Source #

(StatMonoid a x, StatMonoid b x) => StatMonoid (Pair a b) x Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Methods

addValue :: Pair a b -> x -> Pair a b Source #

singletonMonoid :: x -> Pair a b Source #

reduceSample :: (Foldable f, StatMonoid m a) => f a -> m Source #

Calculate statistic over Foldable. It's implemented in terms of foldl'.

reduceSampleVec :: (Vector v a, StatMonoid m a) => v a -> m Source #

Calculate statistic over vector. It's implemented in terms of foldl'.

Data types

data Pair a b Source #

Strict pair. It allows to calculate two statistics in parallel

Constructors

Pair !a !b 
Instances
(Unbox a, Unbox b) => Vector Vector (Pair a b) Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Methods

basicUnsafeFreeze :: PrimMonad m => Mutable Vector (PrimState m) (Pair a b) -> m (Vector (Pair a b)) #

basicUnsafeThaw :: PrimMonad m => Vector (Pair a b) -> m (Mutable Vector (PrimState m) (Pair a b)) #

basicLength :: Vector (Pair a b) -> Int #

basicUnsafeSlice :: Int -> Int -> Vector (Pair a b) -> Vector (Pair a b) #

basicUnsafeIndexM :: Monad m => Vector (Pair a b) -> Int -> m (Pair a b) #

basicUnsafeCopy :: PrimMonad m => Mutable Vector (PrimState m) (Pair a b) -> Vector (Pair a b) -> m () #

elemseq :: Vector (Pair a b) -> Pair a b -> b0 -> b0 #

(Unbox a, Unbox b) => MVector MVector (Pair a b) Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Methods

basicLength :: MVector s (Pair a b) -> Int #

basicUnsafeSlice :: Int -> Int -> MVector s (Pair a b) -> MVector s (Pair a b) #

basicOverlaps :: MVector s (Pair a b) -> MVector s (Pair a b) -> Bool #

basicUnsafeNew :: PrimMonad m => Int -> m (MVector (PrimState m) (Pair a b)) #

basicInitialize :: PrimMonad m => MVector (PrimState m) (Pair a b) -> m () #

basicUnsafeReplicate :: PrimMonad m => Int -> Pair a b -> m (MVector (PrimState m) (Pair a b)) #

basicUnsafeRead :: PrimMonad m => MVector (PrimState m) (Pair a b) -> Int -> m (Pair a b) #

basicUnsafeWrite :: PrimMonad m => MVector (PrimState m) (Pair a b) -> Int -> Pair a b -> m () #

basicClear :: PrimMonad m => MVector (PrimState m) (Pair a b) -> m () #

basicSet :: PrimMonad m => MVector (PrimState m) (Pair a b) -> Pair a b -> m () #

basicUnsafeCopy :: PrimMonad m => MVector (PrimState m) (Pair a b) -> MVector (PrimState m) (Pair a b) -> m () #

basicUnsafeMove :: PrimMonad m => MVector (PrimState m) (Pair a b) -> MVector (PrimState m) (Pair a b) -> m () #

basicUnsafeGrow :: PrimMonad m => MVector (PrimState m) (Pair a b) -> Int -> m (MVector (PrimState m) (Pair a b)) #

(Eq a, Eq b) => Eq (Pair a b) Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Methods

(==) :: Pair a b -> Pair a b -> Bool #

(/=) :: Pair a b -> Pair a b -> Bool #

(Data a, Data b) => Data (Pair a b) Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Methods

gfoldl :: (forall d b0. Data d => c (d -> b0) -> d -> c b0) -> (forall g. g -> c g) -> Pair a b -> c (Pair a b) #

gunfold :: (forall b0 r. Data b0 => c (b0 -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Pair a b) #

toConstr :: Pair a b -> Constr #

dataTypeOf :: Pair a b -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Pair a b)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Pair a b)) #

gmapT :: (forall b0. Data b0 => b0 -> b0) -> Pair a b -> Pair a b #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Pair a b -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Pair a b -> r #

gmapQ :: (forall d. Data d => d -> u) -> Pair a b -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Pair a b -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Pair a b -> m (Pair a b) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Pair a b -> m (Pair a b) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Pair a b -> m (Pair a b) #

(Ord a, Ord b) => Ord (Pair a b) Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Methods

compare :: Pair a b -> Pair a b -> Ordering #

(<) :: Pair a b -> Pair a b -> Bool #

(<=) :: Pair a b -> Pair a b -> Bool #

(>) :: Pair a b -> Pair a b -> Bool #

(>=) :: Pair a b -> Pair a b -> Bool #

max :: Pair a b -> Pair a b -> Pair a b #

min :: Pair a b -> Pair a b -> Pair a b #

(Show a, Show b) => Show (Pair a b) Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Methods

showsPrec :: Int -> Pair a b -> ShowS #

show :: Pair a b -> String #

showList :: [Pair a b] -> ShowS #

Generic (Pair a b) Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Associated Types

type Rep (Pair a b) :: Type -> Type #

Methods

from :: Pair a b -> Rep (Pair a b) x #

to :: Rep (Pair a b) x -> Pair a b #

(Semigroup a, Semigroup b) => Semigroup (Pair a b) Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Methods

(<>) :: Pair a b -> Pair a b -> Pair a b #

sconcat :: NonEmpty (Pair a b) -> Pair a b #

stimes :: Integral b0 => b0 -> Pair a b -> Pair a b #

(Monoid a, Monoid b) => Monoid (Pair a b) Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Methods

mempty :: Pair a b #

mappend :: Pair a b -> Pair a b -> Pair a b #

mconcat :: [Pair a b] -> Pair a b #

(Unbox a, Unbox b) => Unbox (Pair a b) Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

(StatMonoid a x, StatMonoid b x) => StatMonoid (Pair a b) x Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

Methods

addValue :: Pair a b -> x -> Pair a b Source #

singletonMonoid :: x -> Pair a b Source #

newtype MVector s (Pair a b) Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

newtype MVector s (Pair a b) = MV_Pair (MVector s (a, b))
type Rep (Pair a b) Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

type Rep (Pair a b) = D1 (MetaData "Pair" "Data.Monoid.Statistics.Class" "monoid-statistics-1.0.1.0-1S6uCZlndwKGUT6ITei8nH" False) (C1 (MetaCons "Pair" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 a) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 b)))
newtype Vector (Pair a b) Source # 
Instance details

Defined in Data.Monoid.Statistics.Class

newtype Vector (Pair a b) = V_Pair (Vector (a, b))