lhae-0.0.2: src/Model/CellExpression/Evaluator/Math.hs
module Model.CellExpression.Evaluator.Math
(mean,median,medianSorted,stdDeviation
,firstQuartile,firstQuartileSorted
,thirdQuartile,thirdQuartileSorted)
where
import Data.List (sort)
import Model.CellExpression.Evaluator.Common (fLength)
mean :: [Double] -> Double
mean values = sum values / (fLength values)
median,medianSorted :: [Double] -> Double
medianSorted values =
let l = length values
in
if odd l then values !! (l `div` 2)
else
let x = values !! ((l - 1) `div` 2)
y = values !! (l `div` 2)
in
(x + y) / 2
median = medianSorted . sort
firstQuartile,firstQuartileSorted :: [Double] -> Double
firstQuartileSorted values =
let l = length values
in
if odd l then values !! (l `div` 4)
else values !! ((l + 1) `div` 4)
firstQuartile = firstQuartileSorted . sort
thirdQuartile,thirdQuartileSorted :: [Double] -> Double
thirdQuartileSorted values =
let l = length values
in
if odd l then values !! ((3 * l + 2) `div` 4)
else values !! ((3 * l + 1) `div` 4)
thirdQuartile = thirdQuartileSorted . sort
stdDeviation :: [Double] -> Double
stdDeviation [_] = 0
stdDeviation values =
let m = mean values
in
sqrt $ (sum $ map (\v -> (v - m) ** 2) values) / (fLength values - 1)