statistics 0.12.0.0 → 0.13.1.0
raw patch · 23 files changed
+135/−11 lines, 23 filesdep +aesonPVP ok
version bump matches the API change (PVP)
Dependencies added: aeson
API changes (from Hackage documentation)
+ Statistics.Distribution.Beta: instance FromJSON BetaDistribution
+ Statistics.Distribution.Beta: instance ToJSON BetaDistribution
+ Statistics.Distribution.Binomial: instance FromJSON BinomialDistribution
+ Statistics.Distribution.Binomial: instance ToJSON BinomialDistribution
+ Statistics.Distribution.CauchyLorentz: instance FromJSON CauchyDistribution
+ Statistics.Distribution.CauchyLorentz: instance ToJSON CauchyDistribution
+ Statistics.Distribution.ChiSquared: instance FromJSON ChiSquared
+ Statistics.Distribution.ChiSquared: instance ToJSON ChiSquared
+ Statistics.Distribution.Exponential: instance FromJSON ExponentialDistribution
+ Statistics.Distribution.Exponential: instance ToJSON ExponentialDistribution
+ Statistics.Distribution.FDistribution: instance FromJSON FDistribution
+ Statistics.Distribution.FDistribution: instance ToJSON FDistribution
+ Statistics.Distribution.Gamma: instance FromJSON GammaDistribution
+ Statistics.Distribution.Gamma: instance ToJSON GammaDistribution
+ Statistics.Distribution.Geometric: instance FromJSON GeometricDistribution
+ Statistics.Distribution.Geometric: instance FromJSON GeometricDistribution0
+ Statistics.Distribution.Geometric: instance ToJSON GeometricDistribution
+ Statistics.Distribution.Geometric: instance ToJSON GeometricDistribution0
+ Statistics.Distribution.Hypergeometric: instance FromJSON HypergeometricDistribution
+ Statistics.Distribution.Hypergeometric: instance ToJSON HypergeometricDistribution
+ Statistics.Distribution.Normal: instance FromJSON NormalDistribution
+ Statistics.Distribution.Normal: instance ToJSON NormalDistribution
+ Statistics.Distribution.Poisson: instance FromJSON PoissonDistribution
+ Statistics.Distribution.Poisson: instance ToJSON PoissonDistribution
+ Statistics.Distribution.StudentT: instance FromJSON StudentT
+ Statistics.Distribution.StudentT: instance ToJSON StudentT
+ Statistics.Distribution.Transform: instance FromJSON d => FromJSON (LinearTransform d)
+ Statistics.Distribution.Transform: instance ToJSON d => ToJSON (LinearTransform d)
+ Statistics.Distribution.Uniform: instance FromJSON UniformDistribution
+ Statistics.Distribution.Uniform: instance ToJSON UniformDistribution
+ Statistics.Math.RootFinding: instance FromJSON a => FromJSON (Root a)
+ Statistics.Math.RootFinding: instance ToJSON a => ToJSON (Root a)
+ Statistics.Regression: olsRegress :: [Vector] -> Vector -> (Vector, Double)
+ Statistics.Resampling: instance FromJSON Resample
+ Statistics.Resampling: instance ToJSON Resample
+ Statistics.Resampling.Bootstrap: instance FromJSON Estimate
+ Statistics.Resampling.Bootstrap: instance ToJSON Estimate
+ Statistics.Sample.KernelDensity.Simple: instance FromJSON Points
+ Statistics.Sample.KernelDensity.Simple: instance ToJSON Points
+ Statistics.Sample.Powers: instance FromJSON Powers
+ Statistics.Sample.Powers: instance ToJSON Powers
+ Statistics.Test.Types: instance Constructor C1_0TestResult
+ Statistics.Test.Types: instance Constructor C1_0TestType
+ Statistics.Test.Types: instance Constructor C1_1TestResult
+ Statistics.Test.Types: instance Constructor C1_1TestType
+ Statistics.Test.Types: instance Data TestResult
+ Statistics.Test.Types: instance Data TestType
+ Statistics.Test.Types: instance Datatype D1TestResult
+ Statistics.Test.Types: instance Datatype D1TestType
+ Statistics.Test.Types: instance FromJSON TestResult
+ Statistics.Test.Types: instance FromJSON TestType
+ Statistics.Test.Types: instance Generic TestResult
+ Statistics.Test.Types: instance Generic TestType
+ Statistics.Test.Types: instance ToJSON TestResult
+ Statistics.Test.Types: instance ToJSON TestType
Files
- Statistics/Distribution/Beta.hs +4/−0
- Statistics/Distribution/Binomial.hs +4/−0
- Statistics/Distribution/CauchyLorentz.hs +4/−0
- Statistics/Distribution/ChiSquared.hs +4/−0
- Statistics/Distribution/Exponential.hs +4/−0
- Statistics/Distribution/FDistribution.hs +4/−2
- Statistics/Distribution/Gamma.hs +4/−0
- Statistics/Distribution/Geometric.hs +7/−0
- Statistics/Distribution/Hypergeometric.hs +4/−0
- Statistics/Distribution/Normal.hs +4/−1
- Statistics/Distribution/Poisson.hs +4/−0
- Statistics/Distribution/StudentT.hs +4/−0
- Statistics/Distribution/Transform.hs +4/−0
- Statistics/Distribution/Uniform.hs +4/−0
- Statistics/Math/RootFinding.hs +4/−0
- Statistics/Regression.hs +38/−3
- Statistics/Resampling.hs +4/−0
- Statistics/Resampling/Bootstrap.hs +4/−0
- Statistics/Sample/KernelDensity/Simple.hs +4/−0
- Statistics/Sample/Powers.hs +4/−0
- Statistics/Test/Types.hs +12/−4
- changelog.md +4/−0
- statistics.cabal +2/−1
Statistics/Distribution/Beta.hs view
@@ -20,6 +20,7 @@ , bdBeta ) where +import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary) import Data.Data (Data, Typeable) import GHC.Generics (Generic)@@ -37,6 +38,9 @@ , bdBeta :: {-# UNPACK #-} !Double -- ^ Beta shape parameter } deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON BetaDistribution+instance ToJSON BetaDistribution instance Binary BetaDistribution where put (BD x y) = put x >> put y
Statistics/Distribution/Binomial.hs view
@@ -23,6 +23,7 @@ , bdProbability ) where +import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary) import Data.Data (Data, Typeable) import GHC.Generics (Generic)@@ -41,6 +42,9 @@ , bdProbability :: {-# UNPACK #-} !Double -- ^ Probability. } deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON BinomialDistribution+instance ToJSON BinomialDistribution instance Binary BinomialDistribution where put (BD x y) = put x >> put y
Statistics/Distribution/CauchyLorentz.hs view
@@ -21,6 +21,7 @@ , standardCauchy ) where +import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary) import Data.Data (Data, Typeable) import GHC.Generics (Generic)@@ -40,6 +41,9 @@ , cauchyDistribScale :: {-# UNPACK #-} !Double } deriving (Eq, Show, Read, Typeable, Data, Generic)++instance FromJSON CauchyDistribution+instance ToJSON CauchyDistribution instance Binary CauchyDistribution where put (CD x y) = put x >> put y
Statistics/Distribution/ChiSquared.hs view
@@ -18,6 +18,7 @@ , chiSquaredNDF ) where +import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary) import Data.Data (Data, Typeable) import GHC.Generics (Generic)@@ -32,6 +33,9 @@ -- | Chi-squared distribution newtype ChiSquared = ChiSquared Int deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON ChiSquared+instance ToJSON ChiSquared instance Binary ChiSquared where get = fmap ChiSquared get
Statistics/Distribution/Exponential.hs view
@@ -23,6 +23,7 @@ , edLambda ) where +import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary) import Data.Data (Data, Typeable) import GHC.Generics (Generic)@@ -37,6 +38,9 @@ newtype ExponentialDistribution = ED { edLambda :: Double } deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON ExponentialDistribution+instance ToJSON ExponentialDistribution instance Binary ExponentialDistribution where put = put . edLambda
Statistics/Distribution/FDistribution.hs view
@@ -16,6 +16,7 @@ , fDistributionNDF2 ) where +import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary) import Data.Data (Data, Typeable) import Numeric.MathFunctions.Constants (m_neg_inf)@@ -27,14 +28,15 @@ import Data.Binary (put, get) import Control.Applicative ((<$>), (<*>)) -- -- | F distribution data FDistribution = F { fDistributionNDF1 :: {-# UNPACK #-} !Double , fDistributionNDF2 :: {-# UNPACK #-} !Double , _pdfFactor :: {-# UNPACK #-} !Double } deriving (Eq, Show, Read, Typeable, Data, Generic)++instance FromJSON FDistribution+instance ToJSON FDistribution instance Binary FDistribution where get = F <$> get <*> get <*> get
Statistics/Distribution/Gamma.hs view
@@ -25,6 +25,7 @@ , gdScale ) where +import Data.Aeson (FromJSON, ToJSON) import Control.Applicative ((<$>), (<*>)) import Data.Binary (Binary) import Data.Binary (put, get)@@ -41,6 +42,9 @@ gdShape :: {-# UNPACK #-} !Double -- ^ Shape parameter, /k/. , gdScale :: {-# UNPACK #-} !Double -- ^ Scale parameter, ϑ. } deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON GammaDistribution+instance ToJSON GammaDistribution instance Binary GammaDistribution where put (GD x y) = put x >> put y
Statistics/Distribution/Geometric.hs view
@@ -30,6 +30,7 @@ , gdSuccess0 ) where +import Data.Aeson (FromJSON, ToJSON) import Control.Applicative ((<$>)) import Control.Monad (liftM) import Data.Binary (Binary)@@ -47,6 +48,9 @@ gdSuccess :: Double } deriving (Eq, Read, Show, Typeable, Data, Generic) +instance FromJSON GeometricDistribution+instance ToJSON GeometricDistribution+ instance Binary GeometricDistribution where get = GD <$> get put (GD x) = put x@@ -113,6 +117,9 @@ newtype GeometricDistribution0 = GD0 { gdSuccess0 :: Double } deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON GeometricDistribution0+instance ToJSON GeometricDistribution0 instance Binary GeometricDistribution0 where get = GD0 <$> get
Statistics/Distribution/Hypergeometric.hs view
@@ -27,6 +27,7 @@ , hdK ) where +import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary) import Data.Data (Data, Typeable) import GHC.Generics (Generic)@@ -41,6 +42,9 @@ , hdL :: {-# UNPACK #-} !Int , hdK :: {-# UNPACK #-} !Int } deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON HypergeometricDistribution+instance ToJSON HypergeometricDistribution instance Binary HypergeometricDistribution where get = HD <$> get <*> get <*> get
Statistics/Distribution/Normal.hs view
@@ -20,6 +20,7 @@ , standard ) where +import Data.Aeson (FromJSON, ToJSON) import Control.Applicative ((<$>), (<*>)) import Data.Binary (Binary) import Data.Binary (put, get)@@ -31,7 +32,6 @@ import qualified Statistics.Sample as S import qualified System.Random.MWC.Distributions as MWC - -- | The normal distribution. data NormalDistribution = ND { mean :: {-# UNPACK #-} !Double@@ -39,6 +39,9 @@ , ndPdfDenom :: {-# UNPACK #-} !Double , ndCdfDenom :: {-# UNPACK #-} !Double } deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON NormalDistribution+instance ToJSON NormalDistribution instance Binary NormalDistribution where put (ND w x y z) = put w >> put x >> put y >> put z
Statistics/Distribution/Poisson.hs view
@@ -24,6 +24,7 @@ -- $references ) where +import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary) import Data.Data (Data, Typeable) import GHC.Generics (Generic)@@ -37,6 +38,9 @@ newtype PoissonDistribution = PD { poissonLambda :: Double } deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON PoissonDistribution+instance ToJSON PoissonDistribution instance Binary PoissonDistribution where get = fmap PD get
Statistics/Distribution/StudentT.hs view
@@ -16,6 +16,7 @@ , studentTUnstandardized ) where +import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary) import Data.Data (Data, Typeable) import GHC.Generics (Generic)@@ -28,6 +29,9 @@ -- | Student-T distribution newtype StudentT = StudentT { studentTndf :: Double } deriving (Eq, Show, Read, Typeable, Data, Generic)++instance FromJSON StudentT+instance ToJSON StudentT instance Binary StudentT where put = put . studentTndf
Statistics/Distribution/Transform.hs view
@@ -17,6 +17,7 @@ , scaleAround ) where +import Data.Aeson (FromJSON, ToJSON) import Control.Applicative ((<*>)) import Data.Binary (Binary) import Data.Binary (put, get)@@ -37,6 +38,9 @@ , linTransDistr :: d -- ^ Distribution being transformed. } deriving (Eq, Show, Read, Typeable, Data, Generic)++instance (FromJSON d) => FromJSON (LinearTransform d)+instance (ToJSON d) => ToJSON (LinearTransform d) instance (Binary d) => Binary (LinearTransform d) where get = LinearTransform <$> get <*> get <*> get
Statistics/Distribution/Uniform.hs view
@@ -19,6 +19,7 @@ , uniformB ) where +import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary) import Data.Data (Data, Typeable) import GHC.Generics (Generic)@@ -33,6 +34,9 @@ uniformA :: {-# UNPACK #-} !Double -- ^ Low boundary of distribution , uniformB :: {-# UNPACK #-} !Double -- ^ Upper boundary of distribution } deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON UniformDistribution+instance ToJSON UniformDistribution instance Binary UniformDistribution where put (UniformDistribution x y) = put x >> put y
Statistics/Math/RootFinding.hs view
@@ -20,6 +20,7 @@ -- $references ) where +import Data.Aeson (FromJSON, ToJSON) import Control.Applicative (Alternative(..), Applicative(..)) import Control.Monad (MonadPlus(..), ap) import Data.Binary (Binary)@@ -41,6 +42,9 @@ | Root a -- ^ A root was successfully found. deriving (Eq, Read, Show, Typeable, Data, Generic)++instance (FromJSON a) => FromJSON (Root a)+instance (ToJSON a) => ToJSON (Root a) instance (Binary a) => Binary (Root a) where put NotBracketed = putWord8 0
Statistics/Regression.hs view
@@ -7,19 +7,54 @@ module Statistics.Regression (- ols+ olsRegress+ , ols , rSquare ) where import Control.Applicative ((<$>))-import Prelude hiding (sum)+import Prelude hiding (pred, sum) import Statistics.Function as F-import Statistics.Matrix+import Statistics.Matrix hiding (map) import Statistics.Matrix.Algorithms (qr) import Statistics.Sample (mean) import Statistics.Sample.Internal (sum)+import qualified Data.Vector.Generic as G import qualified Data.Vector.Unboxed as U import qualified Data.Vector.Unboxed.Mutable as M++-- | Perform an ordinary least-squares regression on a set of+-- predictors, and calculate the goodness-of-fit of the regression.+--+-- The returned pair consists of:+--+-- * A vector of regression coefficients. This vector has /one more/+-- element than the list of predictors; the last element is the+-- /y/-intercept value.+--+-- * /R²/, the coefficient of determination (see 'rSquare' for+-- details).+olsRegress :: [Vector]+ -- ^ Non-empty list of predictor vectors. Must all have+ -- the same length. These will become the columns of+ -- the matrix /A/ solved by 'ols'.+ -> Vector+ -- ^ Responder vector. Must have the same length as the+ -- predictor vectors.+ -> (Vector, Double)+olsRegress preds@(_:_) resps+ | any (/=n) ls = error $ "predictor vector length mismatch " +++ show lss+ | G.length resps /= n = error $ "responder/predictor length mismatch " +++ show (G.length resps, n)+ | otherwise = (coeffs, rSquare mxpreds resps coeffs)+ where+ coeffs = ols mxpreds resps+ mxpreds = transpose .+ fromVector (length lss + 1) n .+ G.concat $ preds ++ [G.replicate n 1]+ lss@(n:ls) = map G.length preds+olsRegress _ _ = error "no predictors given" -- | Compute the ordinary least-squares solution to /A x = b/. ols :: Matrix -- ^ /A/ has at least as many rows as columns.
Statistics/Resampling.hs view
@@ -23,6 +23,7 @@ , estimate ) where +import Data.Aeson (FromJSON, ToJSON) import Control.Concurrent (forkIO, newChan, readChan, writeChan) import Control.Monad (forM_, liftM, replicateM_) import Control.Monad.Primitive (PrimState)@@ -49,6 +50,9 @@ newtype Resample = Resample { fromResample :: U.Vector Double } deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON Resample+instance ToJSON Resample instance Binary Resample where put = put . fromResample
Statistics/Resampling/Bootstrap.hs view
@@ -25,6 +25,7 @@ import Control.DeepSeq (NFData) import Control.Exception (assert) import Control.Monad.Par (parMap, runPar)+import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary) import Data.Binary (put, get) import Data.Data (Data)@@ -52,6 +53,9 @@ , estConfidenceLevel :: {-# UNPACK #-} !Double -- ^ Confidence level of the confidence intervals. } deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON Estimate+instance ToJSON Estimate instance Binary Estimate where put (Estimate w x y z) = put w >> put x >> put y >> put z
Statistics/Sample/KernelDensity/Simple.hs view
@@ -46,6 +46,7 @@ -- $references ) where +import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary(..)) import Data.Data (Data, Typeable) import Data.Vector.Binary ()@@ -62,6 +63,9 @@ newtype Points = Points { fromPoints :: U.Vector Double } deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON Points+instance ToJSON Points instance Binary Points where get = fmap Points get
Statistics/Sample/Powers.hs view
@@ -47,6 +47,7 @@ -- $references ) where +import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary(..)) import Data.Data (Data, Typeable) import Data.Vector.Binary ()@@ -66,6 +67,9 @@ newtype Powers = Powers (U.Vector Double) deriving (Eq, Read, Show, Typeable, Data, Generic)++instance FromJSON Powers+instance ToJSON Powers instance Binary Powers where put (Powers v) = put v
Statistics/Test/Types.hs view
@@ -1,11 +1,13 @@-{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveDataTypeable, DeriveGeneric #-} module Statistics.Test.Types ( TestType(..) , TestResult(..) , significant ) where -import Data.Typeable (Typeable)+import Data.Aeson (FromJSON, ToJSON)+import Data.Data (Typeable, Data)+import GHC.Generics -- | Test type. Exact meaning depends on a specific test. But@@ -13,12 +15,18 @@ -- for 'OneTailed' or whether it too big or too small for 'TwoTailed' data TestType = OneTailed | TwoTailed- deriving (Eq,Ord,Show,Typeable)+ deriving (Eq,Ord,Show,Typeable,Data,Generic) +instance FromJSON TestType+instance ToJSON TestType+ -- | Result of hypothesis testing data TestResult = Significant -- ^ Null hypothesis should be rejected | NotSignificant -- ^ Data is compatible with hypothesis- deriving (Eq,Ord,Show,Typeable)+ deriving (Eq,Ord,Show,Typeable,Data,Generic)++instance FromJSON TestResult+instance ToJSON TestResult -- | Significant if parameter is 'True', not significant otherwiser significant :: Bool -> TestResult
changelog.md view
@@ -1,3 +1,7 @@+Changes in 0.13.0.0++ * All types now support JSON encoding and decoding.+ Changes in 0.12.0.0 * The `Statistics.Math` module has been removed, after being
statistics.cabal view
@@ -1,5 +1,5 @@ name: statistics-version: 0.12.0.0+version: 0.13.1.0 synopsis: A library of statistical types, data, and functions description: This library provides a number of common functions and types useful@@ -95,6 +95,7 @@ Statistics.Sample.Internal Statistics.Test.Internal build-depends:+ aeson >= 0.6.0.0, base >= 4.4 && < 5, binary >= 0.5.1.0, deepseq >= 1.1.0.2,