summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryanOSullivan <>2013-04-17 23:15:46 (GMT)
committerhdiff <hdiff@hdiff.luite.com>2013-04-17 23:15:46 (GMT)
commit9fc7700f13d16ef3015e7a9dde140b8818ab882a (patch)
tree1cf595f25eac263faac51bd6d61027e5430ebb55
parent3b56f42d5ee0eb2fb7939066c7e1d237677ccafe (diff)
version 0.10.3.10.10.3.1
-rw-r--r--ChangeLog110
-rw-r--r--Statistics/Distribution/Transform.hs6
-rw-r--r--benchmark/bench.hs68
-rw-r--r--statistics.cabal7
-rw-r--r--tests/Tests/Math/Tables.hs47
-rw-r--r--tests/utils/Makefile9
-rw-r--r--tests/utils/fftw.c46
7 files changed, 289 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..d27a474
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,110 @@
+ Changes in 0.10.2.0
+
+ * Bugs in DCT and IDCT are fixed.
+
+ * Accesors for uniform distribution are added.
+
+ * ContGen instances for all continous distribtuions are added.
+
+ * Beta distribution is added.
+
+ * Constructor for improper gamma distribtuion is added.
+
+ * Binomial distribution allows zero trials.
+
+ * Poisson distribution now accept zero parameter.
+
+ * Integer overflow in caculation of Wilcoxon-T test is fixed.
+
+ * Bug in 'ContGen' instance for normal distribution is fixed.
+
+Changes in 0.10.1.0
+
+ * Kolmogorov-Smirnov nonparametric test added.
+
+ * Pearson chi squared test added.
+
+ * Type class for generating random variates for given distribution
+ is added.
+
+ * Modules 'Statistics.Math' and 'Statistics.Constants' are moved to
+ the @math-functions@ package. They are still available but marked
+ as deprecated.
+
+
+Changed in 0.10.0.1
+
+ * @dct@ and @idct@ now have type @Vector Double -> Vector Double@
+
+
+Changes in 0.10.0.0
+
+ * The type classes Mean and Variance are split in two. This is
+ required for distributions which do not have finite variance or
+ mean.
+
+ * The S.Sample.KernelDensity module has been renamed, and
+ completely rewritten to be much more robust. The older module
+ oversmoothed multi-modal data. (The older module is still
+ available under the name S.Sample.KernelDensity.Simple).
+
+ * Histogram computation is added, in S.Sample.Histogram.
+
+ * Discrete Fourie transform is added, in S.Transform
+
+ * Root finding is added, in S.Math.RootFinding.
+
+ * The complCumulative function is added to the Distribution
+ class in order to accurately assess probalities P(X>x) which are
+ used in one-tailed tests.
+
+ * A stdDev function is added to the Variance class for
+ distributions.
+
+ * The constructor S.Distribution.normalDistr now takes standard
+ deviation instead of variance as its parameter.
+
+ * A bug in S.Quantile.weightedAvg is fixed. It produced a wrong
+ answer if a sample contained only one element.
+
+ * Bugs in quantile estimations for chi-square and gamma distribution
+ are fixed.
+
+ * Integer overlow in mannWhitneyUCriticalValue is fixed. It
+ produced incorrect critical values for moderately large
+ samples. Something around 20 for 32-bit machines and 40 for 64-bit
+ ones.
+
+ * A bug in mannWhitneyUSignificant is fixed. If either sample was
+ larger than 20, it produced a completely incorrect answer.
+
+ * One- and two-tailed tests in S.Tests.NonParametric are selected
+ with sum types instead of Bool.
+
+ * Test results returned as enumeration instead of @Bool@.
+
+ * Performance improvements for Mann-Whitney U and Wilcoxon tests.
+
+ * Module @S.Tests.NonParamtric@ is split into @S.Tests.MannWhitneyU@
+ and @S.Tests.WilcoxonT@
+
+ * sortBy is added to S.Function.
+
+ * Mean and variance for gamma distribution are fixed.
+
+ * Much faster cumulative probablity functions for Poisson and
+ hypergeometric distributions.
+
+ * Better density functions for gamma and Poisson distributions.
+
+ * Student-T, Fisher-Snedecor F-distributions and Cauchy-Lorentz
+ distrbution are added.
+
+ * The function S.Function.create is removed. Use generateM from
+ the vector package instead.
+
+ * Function to perform approximate comparion of doubles is added to
+ S.Function.Comparison
+
+ * Regularized incomplete beta function and its inverse are added to
+ S.Function
diff --git a/Statistics/Distribution/Transform.hs b/Statistics/Distribution/Transform.hs
index dd98753..081c909 100644
--- a/Statistics/Distribution/Transform.hs
+++ b/Statistics/Distribution/Transform.hs
@@ -25,11 +25,11 @@ import qualified Statistics.Distribution as D
-- > x' = μ + σ·x
data LinearTransform d = LinearTransform
{ linTransLocation :: {-# UNPACK #-} !Double
- -- | Location parameter.
+ -- ^ Location parameter.
, linTransScale :: {-# UNPACK #-} !Double
- -- | Scale parameter.
+ -- ^ Scale parameter.
, linTransDistr :: d
- -- | Distribution being transformed.
+ -- ^ Distribution being transformed.
} deriving (Eq,Show,Read,Typeable)
-- | Apply linear transformation to distribution.
diff --git a/benchmark/bench.hs b/benchmark/bench.hs
new file mode 100644
index 0000000..d8f752a
--- /dev/null
+++ b/benchmark/bench.hs
@@ -0,0 +1,68 @@
+import Control.Monad.ST (runST)
+import Data.Complex
+import qualified Data.Vector.Unboxed as U
+
+import System.Random.MWC
+import Criterion.Main
+
+import Statistics.Sample
+import Statistics.Transform
+
+
+-- Test sample
+sample :: U.Vector Double
+sample = runST $ flip uniformVector 10000 =<< create
+
+-- Weighted test sample
+sampleW :: U.Vector (Double,Double)
+sampleW = U.zip sample (U.reverse sample)
+
+-- Comlex vector for FFT tests
+sampleC :: U.Vector (Complex Double)
+sampleC = U.zipWith (:+) sample (U.reverse sample)
+
+
+-- Simple benchmark for functions from Statistics.Sample
+main :: IO ()
+main =
+ defaultMain
+ [ bgroup "sample"
+ [ bench "range" $ nf (\x -> range x) sample
+ -- Mean
+ , bench "mean" $ nf (\x -> mean x) sample
+ , bench "meanWeighted" $ nf (\x -> meanWeighted x) sampleW
+ , bench "harmonicMean" $ nf (\x -> harmonicMean x) sample
+ , bench "geometricMean" $ nf (\x -> geometricMean x) sample
+ -- Variance
+ , bench "variance" $ nf (\x -> variance x) sample
+ , bench "varianceUnbiased" $ nf (\x -> varianceUnbiased x) sample
+ , bench "varianceWeighted" $ nf (\x -> varianceWeighted x) sampleW
+ -- Other
+ , bench "stdDev" $ nf (\x -> stdDev x) sample
+ , bench "skewness" $ nf (\x -> skewness x) sample
+ , bench "kurtosis" $ nf (\x -> kurtosis x) sample
+ -- Central moments
+ , bench "C.M. 2" $ nf (\x -> centralMoment 2 x) sample
+ , bench "C.M. 3" $ nf (\x -> centralMoment 3 x) sample
+ , bench "C.M. 4" $ nf (\x -> centralMoment 4 x) sample
+ , bench "C.M. 5" $ nf (\x -> centralMoment 5 x) sample
+ ]
+ , bgroup "FFT"
+ [ bgroup "fft"
+ [ bench (show n) $ whnf fft (U.take n sampleC) | n <- fftSizes ]
+ , bgroup "ifft"
+ [ bench (show n) $ whnf ifft (U.take n sampleC) | n <- fftSizes ]
+ , bgroup "dct"
+ [ bench (show n) $ whnf dct (U.take n sample) | n <- fftSizes ]
+ , bgroup "dct_"
+ [ bench (show n) $ whnf dct_ (U.take n sampleC) | n <- fftSizes ]
+ , bgroup "idct"
+ [ bench (show n) $ whnf idct (U.take n sample) | n <- fftSizes ]
+ , bgroup "idct_"
+ [ bench (show n) $ whnf idct_ (U.take n sampleC) | n <- fftSizes ]
+ ]
+ ]
+
+
+fftSizes :: [Int]
+fftSizes = [32,128,512,2048]
diff --git a/statistics.cabal b/statistics.cabal
index b6536b9..3811b50 100644
--- a/statistics.cabal
+++ b/statistics.cabal
@@ -1,5 +1,5 @@
name: statistics
-version: 0.10.3.0
+version: 0.10.3.1
synopsis: A library of statistical types, data, and functions
description:
This library provides a number of common functions and types useful
@@ -147,12 +147,17 @@ category: Math, Statistics
build-type: Simple
cabal-version: >= 1.8
extra-source-files:
+ ChangeLog
README.markdown
+ benchmark/bench.hs
examples/kde/KDE.hs
examples/kde/data/faithful.csv
examples/kde/kde.html
examples/kde/kde.tpl
tests/Tests/Math/gen.py
+ tests/Tests/Math/Tables.hs
+ tests/utils/Makefile
+ tests/utils/fftw.c
library
exposed-modules:
diff --git a/tests/Tests/Math/Tables.hs b/tests/Tests/Math/Tables.hs
new file mode 100644
index 0000000..89ac560
--- /dev/null
+++ b/tests/Tests/Math/Tables.hs
@@ -0,0 +1,47 @@
+module Tests.Math.Tables where
+
+tableLogGamma :: [(Double,Double)]
+tableLogGamma =
+ [(0.000001250000000, 13.592366285131769033)
+ , (0.000068200000000, 9.5930266308318756785)
+ , (0.000246000000000, 8.3100370767447966358)
+ , (0.000880000000000, 7.03508133735248542)
+ , (0.003120000000000, 5.768129358365567505)
+ , (0.026700000000000, 3.6082588918892977148)
+ , (0.077700000000000, 2.5148371858768232556)
+ , (0.234000000000000, 1.3579557559432759994)
+ , (0.860000000000000, 0.098146578027685615897)
+ , (1.340000000000000, -0.11404757557207759189)
+ , (1.890000000000000, -0.0425116422978701336)
+ , (2.450000000000000, 0.25014296569217625565)
+ , (3.650000000000000, 1.3701041997380685178)
+ , (4.560000000000000, 2.5375143317949580002)
+ , (6.660000000000000, 5.9515377269550207018)
+ , (8.250000000000000, 9.0331869196051233217)
+ , (11.300000000000001, 15.814180681373947834)
+ , (25.600000000000001, 56.711261598328121636)
+ , (50.399999999999999, 146.12815158702164808)
+ , (123.299999999999997, 468.85500075897556371)
+ , (487.399999999999977, 2526.9846647543727158)
+ , (853.399999999999977, 4903.9359135978220365)
+ , (2923.300000000000182, 20402.93198938705973)
+ , (8764.299999999999272, 70798.268343590112636)
+ , (12630.000000000000000, 106641.77264982508495)
+ , (34500.000000000000000, 325976.34838781820145)
+ , (82340.000000000000000, 849629.79603036714252)
+ , (234800.000000000000000, 2668846.4390507959761)
+ , (834300.000000000000000, 10540830.912557534873)
+ , (1230000.000000000000000, 16017699.322315014899)
+ ]
+tableIncompleteBeta :: [(Double,Double,Double,Double)]
+tableIncompleteBeta =
+ [(2.000000000000000, 3.000000000000000, 0.030000000000000, 0.0051864299999999996862)
+ , (2.000000000000000, 3.000000000000000, 0.230000000000000, 0.22845923000000001313)
+ , (2.000000000000000, 3.000000000000000, 0.760000000000000, 0.95465728000000005249)
+ , (4.000000000000000, 2.300000000000000, 0.890000000000000, 0.93829812158347802864)
+ , (1.000000000000000, 1.000000000000000, 0.550000000000000, 0.55000000000000004441)
+ , (0.300000000000000, 12.199999999999999, 0.110000000000000, 0.95063000053947077639)
+ , (13.100000000000000, 9.800000000000001, 0.120000000000000, 1.3483109941962659385e-07)
+ , (13.100000000000000, 9.800000000000001, 0.420000000000000, 0.071321857831804780226)
+ , (13.100000000000000, 9.800000000000001, 0.920000000000000, 0.99999578339197081611)
+ ]
diff --git a/tests/utils/Makefile b/tests/utils/Makefile
new file mode 100644
index 0000000..284f764
--- /dev/null
+++ b/tests/utils/Makefile
@@ -0,0 +1,9 @@
+C = gcc
+CFLAGS = -W -Wall -O2 -std=c99
+LDFLAGS = -lfftw3
+
+.PHONY: all clean
+
+all : fftw
+clean :
+ rm -rf fftw *.o
diff --git a/tests/utils/fftw.c b/tests/utils/fftw.c
new file mode 100644
index 0000000..ef12579
--- /dev/null
+++ b/tests/utils/fftw.c
@@ -0,0 +1,46 @@
+/* Generate some test cases using fftw3 */
+#include <stdlib.h>
+#include <stdio.h>
+#include <fftw3.h>
+
+void dump_vector(int n, double* vec) {
+ for(int i = 0; i < n; i++)
+ printf("%20.15f ", vec[i]);
+ printf("\n");
+}
+
+void dct(int flag, int n) {
+ double* in = malloc( n * sizeof(double));
+ double* out = malloc( n * sizeof(double));
+ //
+ fftw_plan plan = fftw_plan_r2r_1d(n, in, out, flag, FFTW_ESTIMATE);
+ for( int k = 0; k < n; k++) {
+ // Init input vector
+ for( int i = 0; i < n; i++)
+ in[i] = 0;
+ in[k] = 1;
+ // Perform DFT
+ fftw_execute(plan);
+ // Print results
+ dump_vector(n, in );
+ dump_vector(n, out);
+ printf("\n");
+ }
+ //
+ free(in);
+ free(out);
+ fftw_destroy_plan(plan);
+}
+
+int main(void)
+{
+ printf("DCT II (the DCT)\n");
+ dct( FFTW_REDFT10, 2);
+ dct( FFTW_REDFT10, 4);
+
+ printf("DCT III (Inverse DCT)\n");
+ dct( FFTW_REDFT01, 2);
+ dct( FFTW_REDFT01, 4);
+
+ return 0;
+}