dataframe-0.3.1.2: tests/Operations/Statistics.hs
{-# LANGUAGE NumericUnderscores #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
module Operations.Statistics where
import qualified Data.Vector.Unboxed as VU
import qualified DataFrame as D
import qualified DataFrame.Internal.Statistics as D
import Assertions
import Test.HUnit
medianOfOddLengthDataSet :: Test
medianOfOddLengthDataSet =
TestCase
( assertEqual
"Median of an odd length data set"
(D.median' (VU.fromList @Double [179.94, 231.94, 839.06, 534.23, 248.94]))
248.94
)
medianOfEvenLengthDataSet :: Test
medianOfEvenLengthDataSet =
TestCase
( assertEqual
"Median of an even length data set"
(D.median' (VU.fromList @Double [179.94, 231.94, 839.06, 534.23, 248.94, 276.37]))
262.655
)
medianOfEmptyDataSet :: Test
medianOfEmptyDataSet =
TestCase
( assertExpectException
"[Error Case]"
(D.emptyDataSetError "median")
(print $ D.median' (VU.fromList @Double []))
)
skewnessOfDataSetWithSameElements :: Test
skewnessOfDataSetWithSameElements =
TestCase
( assertBool
"Skewness of a data set with the same elements"
(isNaN (D.skewness' (VU.fromList $ replicate 10 42.0)))
)
skewnessOfSymmetricDataSet :: Test
skewnessOfSymmetricDataSet =
TestCase
( assertEqual
"Skewness of a symmetric data set"
(D.skewness' (VU.fromList [-3.0, -2.0, -1.5, 0, 1.5, 2.0, 3.0]))
0
)
skewnessOfSimpleDataSet :: Test
skewnessOfSimpleDataSet =
TestCase
( assertBool
"Skewness of a simple data set"
(abs (D.skewness' (VU.fromList [25, 28, 26, 30, 40, 50, 40]) - 0.566_731_633_676) < 1e-12)
)
skewnessOfEmptyDataSet :: Test
skewnessOfEmptyDataSet =
TestCase
( assertEqual
"Skewness of an empty data set"
(D.skewness' (VU.fromList []))
0
)
twoQuantileOfOddLengthDataSet :: Test
twoQuantileOfOddLengthDataSet =
TestCase
( assertEqual
"2-quantile of an odd length data set"
(D.quantiles' (VU.fromList [0, 1, 2]) 2 (VU.fromList [179.94, 231.94, 839.06, 534.23, 248.94]))
(VU.fromList [179.94, 248.94, 839.06])
)
twoQuantileOfEvenLengthDataSet :: Test
twoQuantileOfEvenLengthDataSet =
TestCase
( assertEqual
"2-quantile of an even length data set"
(D.quantiles' (VU.fromList [0, 1, 2]) 2 (VU.fromList [179.94, 231.94, 839.06, 534.23, 248.94, 276.37]))
(VU.fromList [179.94, 262.655, 839.06])
)
quartilesOfOddLengthDataSet :: Test
quartilesOfOddLengthDataSet =
TestCase
( assertEqual
"Quartiles of an odd length data set"
(D.quantiles' (VU.fromList [0, 1, 2, 3, 4]) 4 (VU.fromList [3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20]))
(VU.fromList [3, 7.5, 9, 14, 20])
)
quartilesOfEvenLengthDataSet :: Test
quartilesOfEvenLengthDataSet =
TestCase
( assertEqual
"Quartiles of an even length data set"
(D.quantiles' (VU.fromList [0, 1, 2, 3, 4]) 4 (VU.fromList [3, 6, 7, 8, 8, 10, 13, 15, 16, 20]))
(VU.fromList [3, 7.25, 9, 14.5, 20])
)
deciles :: Test
deciles =
TestCase
( assertEqual
"Deciles"
( D.quantiles'
(VU.fromList [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
10
(VU.fromList [4, 7, 3, 1, 11, 6, 2, 9, 8, 10, 5])
)
(VU.fromList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
)
interQuartileRangeOfOddLengthDataSet :: Test
interQuartileRangeOfOddLengthDataSet =
TestCase
( assertEqual
"Inter quartile range of an odd length data set"
(D.interQuartileRange' (VU.fromList [3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20]))
6.5
)
interQuartileRangeOfEvenLengthDataSet :: Test
interQuartileRangeOfEvenLengthDataSet =
TestCase
( assertEqual
"Inter quartile range of an even length data set"
(D.interQuartileRange' (VU.fromList [3, 6, 7, 8, 8, 10, 13, 15, 16, 20]))
7.25
)
wrongQuantileNumber :: Test
wrongQuantileNumber =
TestCase
( assertExpectException
"[Error Case]"
(D.wrongQuantileNumberError 1)
(print $ D.quantiles' (VU.fromList [0]) 1 (VU.fromList [1, 2, 3, 4, 5]))
)
wrongQuantileIndex :: Test
wrongQuantileIndex =
TestCase
( assertExpectException
"[Error Case]"
(D.wrongQuantileIndexError (VU.fromList [5]) 4)
(print $ D.quantiles' (VU.fromList [5]) 4 (VU.fromList [1, 2, 3, 4, 5]))
)
tests :: [Test]
tests =
[ TestLabel "medianOfOddLengthDataSet" medianOfOddLengthDataSet
, TestLabel "medianOfEvenLengthDataSet" medianOfEvenLengthDataSet
, TestLabel "medianOfEmptyDataSet" medianOfEmptyDataSet
, TestLabel "skewnessOfDataSetWithSameElements" skewnessOfDataSetWithSameElements
, TestLabel "skewnessOfSymmetricDataSet" skewnessOfSymmetricDataSet
, TestLabel "skewnessOfSimpleDataSet" skewnessOfSimpleDataSet
, TestLabel "skewnessOfEmptyDataSet" skewnessOfEmptyDataSet
, TestLabel "twoQuantileOfOddLengthDataSet" twoQuantileOfOddLengthDataSet
, TestLabel "twoQuantileOfEvenLengthDataSet" twoQuantileOfEvenLengthDataSet
, TestLabel "quartilesOfOddLengthDataSet" quartilesOfOddLengthDataSet
, TestLabel "quartilesOfEvenLengthDataSet" quartilesOfEvenLengthDataSet
, TestLabel "deciles" deciles
, TestLabel "interQuartileRangeOfOddLengthDataSet" interQuartileRangeOfOddLengthDataSet
, TestLabel "interQuartileRangeOfEvenLengthDataSet" interQuartileRangeOfEvenLengthDataSet
, TestLabel "wrongQuantileNumber" wrongQuantileNumber
, TestLabel "wrongQuantileIndex" wrongQuantileIndex
]