----------------------------------------------------------------------------- -- Copyright 2020, Ideas project team. This file is distributed under the -- terms of the Apache License 2.0. For more information, see the files -- "LICENSE.txt" and "NOTICE.txt", which are included in the distribution. ----------------------------------------------------------------------------- module Domain.Hypothesis.Tables ( zTableS, zTable, tTableS, tTable, fTable, chiTable ) where zTableS :: Bool -> Double -> Maybe Double zTableS True alpha = zTable alpha zTableS False alpha = zTable (alpha * 2) zTable :: Double -> Maybe Double zTable 0.05 = Just 1.645 zTable 0.025 = Just 1.960 zTable 0.01 = Just 2.326 zTable 0.005 = Just 2.576 zTable 0.0025 = Just 2.807 zTable 0.001 = Just 3.090 zTable _ = Nothing tTableS :: Bool -> Double -> Int -> Maybe Double tTableS True alpha df = tTable alpha df tTableS False alpha df = tTable (alpha * 2) df tTable :: Double -> Int -> Maybe Double tTable alpha df | df > 60 = lookup alpha [(0.1, 1.282), (0.05, 1.645), (0.025, 1.960), (0.01, 2.326), (0.005, 2.576)] | otherwise = tTable' alpha df tTable' :: Double -> Int -> Maybe Double tTable' 0.1 df = lookup df [(1, 3.078), (2, 1.886), (3, 1.638), (4, 1.533), (5, 1.476), (6, 1.440), (7, 1.415), (8, 1.397), (9, 1.383), (10, 1.372), (11, 1.363), (12, 1.356), (13, 1.350), (14, 1.345), (15, 1.341), (16, 1.337), (17, 1.333), (18, 1.330), (19, 1.328), (20, 1.325), (21, 1.323), (22, 1.321), (23, 1.319), (24, 1.318), (25, 1.316), (26, 1.315), (27, 1.314), (28, 1.313), (29, 1.311), (30, 1.310), (40, 1.303), (60, 1.296)] tTable' 0.05 df = lookup df [(1, 6.314), (2, 2.920), (3, 2.353), (4, 2.132), (5, 2.015), (6, 1.943), (7, 1.895), (8, 1.860), (9, 1.833), (10, 1.812), (11, 1.796), (12, 1.782), (13, 1.771), (14, 1.761), (15, 1.753), (16, 1.746), (17, 1.740), (18, 1.734), (19, 1.729), (20, 1.725), (21, 1.721), (22, 1.717), (23, 1.714), (24, 1.711), (25, 1.708), (26, 1.706), (27, 1.703), (28, 1.701), (29, 1.699), (30, 1.697), (40, 1.684), (60, 1.671)] tTable' 0.025 df = lookup df [(1, 12.706), (2, 4.303), (3, 3.182), (4, 2.776), (5, 2.571), (6, 2.447), (7, 2.365), (8, 2.306), (9, 2.262), (10, 2.228), (11, 2.201), (12, 2.179), (13, 2.160), (14, 2.145), (15, 2.131), (16, 2.120), (17, 2.110), (18, 2.101), (19, 2.093), (20, 2.086), (21, 2.080), (22, 2.074), (23, 2.069), (24, 2.064), (25, 2.060), (26, 2.056), (27, 2.052), (28, 2.048), (29, 2.045), (30, 2.042), (40, 2.021), (60, 2.000)] tTable' 0.01 df = lookup df [(1, 31.821), (2, 6.965), (3, 4.541), (4, 3.747), (5, 3.365), (6, 3.143), (7, 2.998), (8, 2.896), (9, 2.821), (10, 2.764), (11, 2.718), (12, 2.681), (13, 2.650), (14, 2.624), (15, 2.602), (16, 2.583), (17, 2.567), (18, 2.552), (19, 2.539), (20, 2.528), (21, 2.518), (22, 2.508), (23, 2.500), (24, 2.492), (25, 2.485), (26, 2.479), (27, 2.473), (28, 2.467), (29, 2.462), (30, 2.457), (40, 2.423), (60, 2.390)] tTable' 0.005 df = lookup df [(1, 63.657), (2, 9.925), (3, 5.841), (4, 4.604), (5, 4.032), (6, 3.707), (7, 3.499), (8, 3.355), (9, 3.250), (10, 3.169), (11, 3.106), (12, 3.055), (13, 3.012), (14, 2.997), (15, 2.947), (16, 2.921), (17, 2.898), (18, 2.878), (19, 2.861), (20, 2.845), (21, 2.831), (22, 2.819), (23, 2.807), (24, 2.797), (25, 2.787), (26, 2.779), (27, 2.771), (28, 2.763), (29, 2.756), (30, 2.750), (40, 2.704), (60, 2.660)] tTable' _ _ = Nothing -- for Anova fTable :: Double -> Double -> Double -> Maybe Double fTable dfBetween dfWithin alpha | alpha == 0.05 = lookup (dfBetween, dfWithin) [((1, 38), 4.10), ((1, 40), 4.08), ((2, 38), 3.25), ((2, 40), 3.23) ] | alpha == 0.01 = lookup (dfBetween, dfWithin) [((1, 38), 7.35), ((1, 40), 7.31), ((2, 38), 5.21), ((2, 40), 5.18) ] | otherwise = Nothing -- for Chi squared chiTable :: Double -> Int -> Maybe Double chiTable alpha df | alpha == 0.10 && df > 0 && df <= 20 = Just $ [ 2.71, 4.61, 6.25, 7.78, 9.24, 10.64, 12.02, 13.36, 14.68, 15.99 , 17.28, 18.55, 19.81, 21.06, 22.31, 23.54, 24.77, 25.99, 27.20, 28.41 ] !! (df - 1) | alpha == 0.05 && df > 0 && df <= 20 = Just $ [ 3.84, 5.99, 7.81, 9.49, 11.07, 12.59, 14.07, 15.51, 16.92, 18.31 , 19.68, 21.03, 22.36, 23.68, 25.00, 26.30, 27.59, 28.87, 30.14, 31.41 ] !! (df - 1) | alpha == 0.025 && df > 0 && df <= 20 = Just $ [ 5.02, 7.38, 9.35, 11.14, 12.83, 14.45, 16.01, 17.53, 19.02, 20.48 , 21.92, 23.34, 24.74, 26.12, 27.49, 28.85, 30.19, 31.53, 32.85, 34.17 ] !! (df - 1) | alpha == 0.01 && df > 0 && df <= 20 = Just $ [ 6.63, 9.21, 11.34, 13.28, 15.09, 16.81, 18.48, 20.09, 21.67, 23.21 , 24.72, 26.22, 27.69, 29.14, 30.58, 32.00, 33.41, 34.81, 36.19, 37.57 ] !! (df - 1) | alpha == 0.005 && df > 0 && df <= 20 = Just $ [ 7.88, 10.60, 12.84, 14.86, 16.75, 18.55, 20.28, 21.96, 23.59, 25.19 , 26.76, 28.30, 29.82, 31.32, 32.80, 34.27, 35.72, 37.16, 38.58, 40.00 ] !! (df - 1) | otherwise = Nothing