Skip to content

Commit

Permalink
add variance functions
Browse files Browse the repository at this point in the history
  • Loading branch information
Taha Hachana committed Sep 27, 2012
1 parent 8e88ccd commit 42bbaee
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 2 deletions.
2 changes: 1 addition & 1 deletion FStats/AssemblyInfo.fs
Expand Up @@ -11,6 +11,6 @@ module AssemblyInfo =
[<AssemblyFileVersion("1.0.0.0")>]
[<AssemblyProduct("FStats")>]
[<AssemblyTitle("FStats")>]
[<AssemblyVersion("0.1.6.0")>]
[<AssemblyVersion("0.1.8.0")>]

do ()
2 changes: 2 additions & 0 deletions FStats/DescriptiveStatistics.fs
Expand Up @@ -18,8 +18,10 @@ module DescriptiveStatistics =
Median = median data
Minimum = minimum
Mode = mode data
PopulationVariance = populationVariance data
Range = maximum - minimum
UpperQuartile = upperQuartile
Variance = variance data
}


12 changes: 12 additions & 0 deletions FStats/Script.fsx
Expand Up @@ -12,6 +12,10 @@ let data =

let stats = DescriptiveStatistics.describe data

let interQuartileRange = stats.InterQuartileRange
let interQuartileRange' = Statistics.interQuartileRange data
let interQuartileRange'' = Seq.interQuartileRange data

let q1 = stats.LowerQuartile
let q1' = Statistics.lowerQuartile data
let q1'' = Seq.lowerQuartile data
Expand All @@ -36,10 +40,18 @@ let mode = stats.Mode
let mode' = Statistics.mode data
let mode'' = Seq.mode data

let popVariance = stats.PopulationVariance
let popVariance' = Statistics.populationVariance data
let popVariance'' = Seq.populationVariance data

let range = stats.Range
let range' = Statistics.range data
let range'' = Seq.range data

let q3 = stats.UpperQuartile
let q3' = Statistics.upperQuartile data
let q3'' = Seq.upperQuartile data

let variance = stats.Variance
let variance' = Statistics.variance data
let variance'' = Seq.variance data
4 changes: 3 additions & 1 deletion FStats/Seq.fs
Expand Up @@ -8,6 +8,8 @@ module Seq =
let mean = Statistics.mean
let median = Statistics.median
let minimum = Statistics.minimum
let mode = Statistics.mode
let mode = Statistics.mode
let populationVariance = Statistics.populationVariance
let range = Statistics.range
let upperQuartile = Statistics.upperQuartile
let variance = Statistics.variance
20 changes: 20 additions & 0 deletions FStats/Statistics.fs
Expand Up @@ -67,6 +67,16 @@ module Statistics =
|> Seq.map fst
|> Seq.toList

/// <summary>Calculates the variance of a data set using N degrees of freedom.</summary>
/// <param name="data">The dat set.</param>
/// <returns>The variance value.</returns>
let inline populationVariance (data: seq<float>) =
let mean = mean data
data
|> Seq.map (fun x -> pown x 2)
|> Seq.average
|> (fun x -> x - (pown mean 2))

/// <summary>Calculates the range of a data set.</summary>
/// <param name="data">The dat set.</param>
/// <returns>The range value.</returns>
Expand All @@ -84,3 +94,13 @@ module Statistics =
let isEven = float (Seq.length data * 3) / 4. |> (fun x -> x % 2. = 0.)
patternMatch isEven index sortedData

/// <summary>Calculates the variance of a data set using (N - 1) degrees of freedom.</summary>
/// <param name="data">The dat set.</param>
/// <returns>The variance value.</returns>
let inline variance (data: seq<float>) =
let mean = mean data
data
|> Seq.map (fun x -> pown x 2)
|> Seq.sum
|> (fun x -> x / (Seq.length data - 1 |> float))
|> (fun x -> x - (pown mean 2))
2 changes: 2 additions & 0 deletions FStats/Types.fs
Expand Up @@ -11,8 +11,10 @@ module Types =
Median : float
Minimum : float
Mode : float list
PopulationVariance : float
Range : float
UpperQuartile : float
Variance : float
}


0 comments on commit 42bbaee

Please sign in to comment.