packages feed

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)