## Saturday, March 29, 2014

### Power means

Before we get going, let me mention that my friends over at What does the quant say? have started a blog! This weeks post is about? You guessed it, statistics! You can check out "Getting our hands dirty with beta functions" by clicking here.

This post picks up where we left off in "Statistics", looking at different definitions for the mean of a sequence of numbers.

The geometric mean together with the arithmetic and harmonic means of the last post together are called the Pythagorean means.

let geometric_mean t =
(*http://en.wikipedia.org/wiki/Geometric_mean

The geometric mean is defined as the nth root (where n is the
count of numbers) of the product of the numbers.

*)
let n = List.length t in
let prod = List.fold_left (fun acc xi -> acc *. xi) 1.0 t in
prod ** (1.0/.(float_of_int n))

Note the presence of the power function powf (operator ( ** ))! How to compute values of this function was the focus of this post.

Here is yet another common mean, the quadratic mean.

let quadratic_mean t =
(*http://en.wikipedia.org/wiki/Root_mean_square

In mathematics, the root mean square (abbreviated RMS or rms),
also known as the quadratic mean, is a statistical measure of the
magnitude of a varying quantity. It is especially useful when
variates are positive and negative, e.g., sinusoids. RMS is used
in various fields, including electrical engineering.  It can be
calculated for a series of discrete values or for a continuously
varying function. Its name comes from its definition as the square
root of the mean of the squares of the values.

*)
let squares = List.fold_left
(fun acc xi -> acc @ [xi *. xi]) [] t in
sqrt (arithmetic_mean squares)


The generalized mean or "power mean" includes all of the means we have considered to date as special cases.

let power_mean p t =
(*http://en.wikipedia.org/wiki/Generalized_mean

In mathematics, generalized means are a family of functions for
aggregating sets of numbers, that include as special cases the
arithmetic, geometric, and harmonic means

*)
let powers = List.fold_left
(fun acc xi -> acc @ [( ** ) xi p]) [] t in
(arithmetic_mean powers)**(1.0/.p)

Note: Recovering the geometric mean from this definition requires looking at the limit of the expression as p -> 0 and application of L'Hopital's rule (see http://en.wikipedia.org/wiki/Generalized_mean for the details).