Copyright | (c) 2009 Bryan O'Sullivan |
---|---|
License | BSD3 |
Maintainer | bos@serpentine.com |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell98 |
Type classes for probability distributions
Synopsis
- 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 FromSample d a where
- fromSample :: Vector v a => v a -> Maybe d
- 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
- genContinuous :: (ContDistr d, PrimMonad m) => d -> Gen (PrimState m) -> m Double
- 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 #
Type class common to all distributions. Only c.d.f. could be defined for both discrete and continuous distributions.
cumulative :: d -> Double -> Double #
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 #
One's complement of cumulative distribution:
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.
Instances
class Distribution d => DiscreteDistr d where #
Discrete probability distribution.
Nothing
probability :: d -> Int -> Double #
Probability of n-th outcome.
logProbability :: d -> Int -> Double #
Logarithm of probability of n-th outcome
Instances
class Distribution d => ContDistr d where #
Continuous probability distribution.
Minimal complete definition is quantile
and either density
or
logDensity
.
density :: d -> Double -> Double #
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 #
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
complQuantile :: d -> Double -> Double #
1-complement of quantile
:
complQuantile x ≡ quantile (1 - x)
logDensity :: d -> Double -> Double #
Natural logarithm of density.
Instances
Distribution statistics
class Distribution d => MaybeMean d where #
Type class for distributions with mean. maybeMean
should return
Nothing
if it's undefined for current value of data
Instances
class MaybeMean d => Mean d where #
Type class for distributions with mean. If a distribution has finite mean for all valid values of parameters it should be instance of this type class.
Instances
class MaybeMean d => MaybeVariance d where #
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 #
maybeStdDev :: d -> Maybe Double #
Instances
class (Mean d, MaybeVariance d) => Variance d where #
Type class for distributions with variance. If distribution have finite variance for all valid parameter values it should be instance of this type class.
Nothing
Instances
class Distribution d => MaybeEntropy d where #
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 #
Returns the entropy of a distribution, in nats, if such is defined.
Instances
class MaybeEntropy d => Entropy d where #
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.
Instances
class FromSample d a where #
Estimate distribution from sample. First parameter in sample is distribution type and second is element type.
fromSample :: Vector v a => v a -> Maybe d #
Estimate distribution from sample. Returns nothing is there's not enough data to estimate or sample clearly doesn't come from distribution in question. For example if there's negative samples in exponential distribution.
Instances
FromSample NormalDistribution Double # | Variance is estimated using maximum likelihood method (biased estimation). Returns |
Defined in Statistics.Distribution.Normal fromSample :: Vector v Double => v Double -> Maybe NormalDistribution # | |
FromSample LaplaceDistribution Double # | Create Laplace distribution from sample. No tests are made to check whether it truly is Laplace. Location of distribution estimated as median of sample. |
Defined in Statistics.Distribution.Laplace fromSample :: Vector v Double => v Double -> Maybe LaplaceDistribution # | |
FromSample ExponentialDistribution Double # | Create exponential distribution from sample. Returns |
Defined in Statistics.Distribution.Exponential fromSample :: Vector v Double => v Double -> Maybe ExponentialDistribution # |
Random number generation
class Distribution d => ContGen d where #
Generate discrete random variates which have given distribution.
Instances
class (DiscreteDistr d, ContGen d) => DiscreteGen d where #
Generate discrete random variates which have given
distribution. ContGen
is superclass because it's always possible
to generate real-valued variates from integer values
Instances
DiscreteGen GeometricDistribution0 # | |
Defined in Statistics.Distribution.Geometric genDiscreteVar :: PrimMonad m => GeometricDistribution0 -> Gen (PrimState m) -> m Int # | |
DiscreteGen GeometricDistribution # | |
Defined in Statistics.Distribution.Geometric genDiscreteVar :: PrimMonad m => GeometricDistribution -> Gen (PrimState m) -> m Int # |
genContinuous :: (ContDistr d, PrimMonad m) => d -> Gen (PrimState m) -> m Double #
Generate variates from continuous distribution using inverse transform rule.
genContinous :: (ContDistr d, PrimMonad m) => d -> Gen (PrimState m) -> m Double #
Deprecated: Use genContinuous
Backwards compatibility with genContinuous.
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 #
Sum probabilities in inclusive interval.