Copyright | (c) 2009 Bryan O'Sullivan |
---|---|
License | BSD3 |
Maintainer | bos@serpentine.com |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell98 |
Types classes for probability distrubutions
- class Distribution d where
- cumulative :: d -> Double -> Double
- complCumulative :: d -> Double -> Double
- class Distribution d => DiscreteDistr d where
- probability :: d -> Int -> Double
- logProbability :: d -> Int -> Double
- class Distribution d => ContDistr d where
- class Distribution d => MaybeMean d where
- class MaybeMean d => Mean d where
- class MaybeMean d => MaybeVariance d where
- maybeVariance :: d -> Maybe Double
- maybeStdDev :: d -> Maybe Double
- class (Mean d, MaybeVariance d) => Variance d where
- class Distribution d => MaybeEntropy d where
- maybeEntropy :: d -> Maybe Double
- class MaybeEntropy d => Entropy d where
- class Distribution d => ContGen d where
- genContVar :: PrimMonad m => d -> Gen (PrimState m) -> m Double
- class (DiscreteDistr d, ContGen d) => DiscreteGen d where
- genDiscreteVar :: PrimMonad m => d -> Gen (PrimState m) -> m Int
- genContinous :: (ContDistr d, PrimMonad m) => d -> Gen (PrimState m) -> m Double
- findRoot :: ContDistr d => d -> Double -> Double -> Double -> Double -> Double
- sumProbabilities :: DiscreteDistr d => d -> Int -> Int -> Double
Type classes
class Distribution d where Source
Type class common to all distributions. Only c.d.f. could be defined for both discrete and continous distributions.
cumulative :: d -> Double -> Double Source
Cumulative distribution function. The probability that a random variable X is less or equal than x, i.e. P(X≤x). Cumulative should be defined for infinities as well:
cumulative d +∞ = 1 cumulative d -∞ = 0
complCumulative :: d -> Double -> Double Source
One's complement of cumulative distibution:
complCumulative d x = 1 - cumulative d x
It's useful when one is interested in P(X<x) and expression on the right side begin to lose precision. This function have default implementation but implementors are encouraged to provide more precise implementation.
class Distribution d => DiscreteDistr d where Source
Discrete probability distribution.
Nothing
probability :: d -> Int -> Double Source
Probability of n-th outcome.
logProbability :: d -> Int -> Double Source
Logarithm of probability of n-th outcome
class Distribution d => ContDistr d where Source
Continuous probability distributuion.
Minimal complete definition is quantile
and either density
or
logDensity
.
density :: d -> Double -> Double Source
Probability density function. Probability that random variable X lies in the infinitesimal interval [x,x+δx) equal to density(x)⋅δx
quantile :: d -> Double -> Double Source
Inverse of the cumulative distribution function. The value
x for which P(X≤x) = p. If probability is outside
of [0,1] range function should call error
logDensity :: d -> Double -> Double Source
Natural logarithm of density.
Distribution statistics
class Distribution d => MaybeMean d where Source
Type class for distributions with mean. maybeMean
should return
Nothing
if it's undefined for current value of data
class MaybeMean d => Mean d where Source
Type class for distributions with mean. If distribution have finite mean for all valid values of parameters it should be instance of this type class.
class MaybeMean d => MaybeVariance d where Source
Type class for distributions with variance. If variance is
undefined for some parameter values both maybeVariance
and
maybeStdDev
should return Nothing.
Minimal complete definition is maybeVariance
or maybeStdDev
Nothing
maybeVariance :: d -> Maybe Double Source
maybeStdDev :: d -> Maybe Double Source
class (Mean d, MaybeVariance d) => Variance d where Source
Type class for distributions with variance. If distibution have finite variance for all valid parameter values it should be instance of this type class.
Nothing
class Distribution d => MaybeEntropy d where Source
Type class for distributions with entropy, meaning Shannon entropy
in the case of a discrete distribution, or differential entropy in the
case of a continuous one. maybeEntropy
should return Nothing
if
entropy is undefined for the chosen parameter values.
maybeEntropy :: d -> Maybe Double Source
Returns the entropy of a distribution, in nats, if such is defined.
class MaybeEntropy d => Entropy d where Source
Type class for distributions with entropy, meaning Shannon entropy in the case of a discrete distribution, or differential entropy in the case of a continuous one. If the distribution has well-defined entropy for all valid parameter values then it should be an instance of this type class.
Random number generation
class Distribution d => ContGen d where Source
Generate discrete random variates which have given distribution.
class (DiscreteDistr d, ContGen d) => DiscreteGen d where Source
Generate discrete random variates which have given
distribution. ContGen
is superclass because it's always possible
to generate real-valued variates from integer values
genContinous :: (ContDistr d, PrimMonad m) => d -> Gen (PrimState m) -> m Double Source
Generate variates from continous distribution using inverse transform rule.
Helper functions
:: ContDistr d | |
=> d | Distribution |
-> Double | Probability p |
-> Double | Initial guess |
-> Double | Lower bound on interval |
-> Double | Upper bound on interval |
-> Double |
Approximate the value of X for which P(x>X)=p.
This method uses a combination of Newton-Raphson iteration and bisection with the given guess as a starting point. The upper and lower bounds specify the interval in which the probability distribution reaches the value p.
sumProbabilities :: DiscreteDistr d => d -> Int -> Int -> Double Source
Sum probabilities in inclusive interval.