Shayne Fletcher is hooked on computer programming, and we are hooked on his blog. His most recent posts are a irresistible introduction to some fundamental statistics via OCaml programming, among them a total of five different definitions of the mean value of a sequence. In this post we continue Shayne’s discussion with a side dish of calculus and R thrown in for good measure. You should really read Shayne’s blog posts on statistics and power means before you continue reading this.

Shayne introduces five different means: arithmetic, harmonic, geometric, quadratic, and power. Given a sequence of numbers , the formulae for these five means are:

It is evident that the harmonic mean, arithmetic mean, and quadratic means are special cases of the power means when , , and respectively. However, the geometric mean looks like it doesn’t fit in.

The power mean is undefined when because of that pesky exponent . However, since the power mean is defined for all nonzero value of , it is in particular defined for near zero and hence we can take a limit. We even get to invoke L’Hopital’s rule along the way.

For ease of notation, let represent the sum

Notice that and

which implies that . Knowing both and allows us to calculate the limit of the power means:

Thus the geometric mean is simply the limit of the power mean.

So now that we are viewing everything as special cases of power mean, how do we go about interpreting the parameter ? Well, simply put, the greater that is, the closer that the power mean will be to the maximal element in our sequence. Conversely, power means for negative values of are closer to the minimal element of our sequence.

Let’s visualize this using R, by generating a sequence of 100 samples from the uniform distribution . We plot the power mean of this sequence against using the code below.


# change these parameters if you want
max = 100
num_samples = 100

# generate 100 samples from 0 to 100
samples <- max * runif(num_samples)

# my power mean function
powermean <- function(samples, d) {
    if (d == 0) {
        exp(sum(log(samples)) / length(samples))
    } else {
        (sum(samples ^ d) / length(samples)) ^ (1 / d)

# x axis goes from -10 to 5 skipping 0
d <- c(seq(-10,-0.01,by = 0.01), seq(0.01,10,by = 0.01))

# calculate all the power means
y <- sapply(d, function(d) powermean(samples, d))

myPlot <- ggplot() +
    geom_line(aes(x = d, y = y), color = "#56B4E9") +
    geom_point(size = 5,
               aes(x = -1, y = powermean(samples, -1),color = "#E69F00")) +
    geom_point(size = 5,
               aes(x = -0, y = powermean(samples, 0), color = "#009E73")) +
    geom_point(size = 5,
               aes(x = 1, y = powermean(samples, 1), color = "#F0E442")) +
    geom_point(size = 5,
               aes(x = 2, y = powermean(samples, 2), color = "#0072B2")) +
    scale_color_manual(values = c("#E69F00","#009E73","#F0E442","#0072B2"),
                       breaks = c("#E69F00", "#009E73", "#F0E442", "#0072B2"),
                       labels = c("harmonic",
                                  "quadratic")) +
    theme(axis.title.x = element_blank()) +
    theme(axis.title.y = element_blank()) +
    theme(legend.title = element_blank())

# ...profit!

This code generates the pretty picture below.

You can see in this case that we have a progression harmonic mean < geometric mean < arithmetic mean < quadratic mean, which is consistent with our observation that the power in the power means formula represents how close the mean will be to the smallest or largest element of our sequence (in this case 1 and 99). This is an example of the generalized mean inequality, which states that if we define as

then implies

blog comments powered by Disqus

Written by

Stephanie Yang


06 April 2014