packages feed

statistics-0.8.0.2: Statistics/Distribution/Beta.hs

{-# LANGUAGE DeriveDataTypeable #-}
-- |
-- Module    : Statistics.Distribution.Beta
-- Copyright : (c) 2010 Karamaan Group
--
-- The beta distribution.

module Statistics.Distribution.Beta
    (
      BetaDistribution
    -- * Constructors
    , fromParams
    -- * Accessors
    , tridistA
    , tridistB
    , tridistC
    ) where

import Control.Exception
import Data.Generics
import Foreign.C.Math.Double (gamma)
import qualified Statistics.Distribution as D

data BetaDistribution = BetaDist {
  alpha :: Double,
  beta :: Double
} deriving (Eq, Read, Show, Typeable, Data)

instance D.Distribution BetaDistribution where
  density (BetaDist a b) x = (gamma (a+b) / (gamma a * gamma b)) *
    (x**(a-1)) * ((1-x)**(b-1))
  {-# INLINE density #-}
  cumulative (BetaDist a b) x = undefined
  {-# INLINE cumulative #-}
  quantile (BetaDist a b) p = undefined
  {-# INLINE quantile #-}

instance D.Variance BetaDistribution where
    variance (BetaDist a b) = (a * b) /
      ((a+b)^2 * (a + b + 1))
    {-# INLINE variance #-}

instance D.Mean BetaDistribution where
    mean (BetaDist a b) = a / (a + b)
    {-# INLINE mean #-}

fromParams :: Double -> Double -> BetaDistribution
fromParams a b = assert (a > 0 && b > 0) (BetaDist a b)
{-# INLINE fromParams #-}