1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
module Tests.Parametric (tests) where
import Data.Maybe (fromJust)
import Statistics.Test.StudentT
import Statistics.Types
import qualified Data.Vector.Unboxed as U
import Test.Tasty (testGroup)
import Tests.Helpers (testEquality)
import qualified Test.Tasty as Tst
tests :: Tst.TestTree
tests = testGroup "Parametric tests" studentTTests
-- 2 samples x 20 obs data
--
-- Both samples are samples from normal distributions with the same variance (= 1.0),
-- but their means are different (0.0 and 0.5, respectively).
--
-- You can reproduce the data with R (3.1.0) as follows:
-- set.seed(0)
-- sample1 = rnorm(20)
-- sample2 = rnorm(20, 0.5)
-- student = t.test(sample1, sample2, var.equal=T)
-- welch = t.test(sample1, sample2)
-- paired = t.test(sample1, sample2, paired=T)
sample1, sample2 :: U.Vector Double
sample1 = U.fromList [
1.262954284880793e+00,
-3.262333607056494e-01,
1.329799262922501e+00,
1.272429321429405e+00,
4.146414344564082e-01,
-1.539950041903710e+00,
-9.285670347135381e-01,
-2.947204467905602e-01,
-5.767172747536955e-03,
2.404653388857951e+00,
7.635934611404596e-01,
-7.990092489893682e-01,
-1.147657009236351e+00,
-2.894615736882233e-01,
-2.992151178973161e-01,
-4.115108327950670e-01,
2.522234481561323e-01,
-8.919211272845686e-01,
4.356832993557186e-01,
-1.237538421929958e+00]
sample2 = U.fromList [
2.757321147216907e-01,
8.773956459817011e-01,
6.333363608148415e-01,
1.304189509744908e+00,
4.428932256161913e-01,
1.003607972233726e+00,
1.585769362145687e+00,
-1.909538396968303e-01,
-7.845993538721883e-01,
5.467261721883520e-01,
2.642934435604988e-01,
-4.288825501025439e-02,
6.668968254321778e-02,
-1.494716467962331e-01,
1.226750747385451e+00,
1.651911754087200e+00,
1.492160365445798e+00,
7.048689050811874e-02,
1.738304100853380e+00,
2.206537181457307e-01]
testTTest :: String
-> PValue Double
-> Test d
-> [Tst.TestTree]
testTTest name pVal test =
[ testEquality name (isSignificant pVal test) NotSignificant
, testEquality name (isSignificant (mkPValue $ pValue pVal + 1e-5) test)
Significant
]
studentTTests :: [Tst.TestTree]
studentTTests = concat
[ -- R: t.test(sample1, sample2, alt="two.sided", var.equal=T)
testTTest "two-sample t-test SamplesDiffer Student"
(mkPValue 0.03410) (fromJust $ studentTTest SamplesDiffer sample1 sample2)
-- R: t.test(sample1, sample2, alt="two.sided", var.equal=F)
, testTTest "two-sample t-test SamplesDiffer Welch"
(mkPValue 0.03483) (fromJust $ welchTTest SamplesDiffer sample1 sample2)
-- R: t.test(sample1, sample2, alt="two.sided", paired=T)
, testTTest "two-sample t-test SamplesDiffer Paired"
(mkPValue 0.03411) (fromJust $ pairedTTest SamplesDiffer sample12)
-- R: t.test(sample1, sample2, alt="less", var.equal=T)
, testTTest "two-sample t-test BGreater Student"
(mkPValue 0.01705) (fromJust $ studentTTest BGreater sample1 sample2)
-- R: t.test(sample1, sample2, alt="less", var.equal=F)
, testTTest "two-sample t-test BGreater Welch"
(mkPValue 0.01741) (fromJust $ welchTTest BGreater sample1 sample2)
-- R: t.test(sample1, sample2, alt="less", paired=F)
, testTTest "two-sample t-test BGreater Paired"
(mkPValue 0.01705) (fromJust $ pairedTTest BGreater sample12)
]
where sample12 = U.zip sample1 sample2
|