How to calculate sample and population variances in Matlab?

matlab, statistics

Solution

Try this:

var = sum(a.^2)/(length(a)-1) - (length(a))*mean(a)^2/(length(a)-1)


var =

  335.2111

`var` is computed as (unbiased) sample, not population variance.

For a complete explanation you can read here.

From the matlab documentation,

VAR normalizes Y by N-1, where N is the sample size. This is an unbiased estimator of the variance of the population from which X is drawn, as long as X consists of independent, identically distributed samples.

but

Y = VAR(X,1) normalizes by N and produces the second moment of the sample about its mean. VAR(X,0) is the same as VAR(X).

so that

>> var(a,1)

ans =

  301.6900

Problem

I have a vector `a` ``` a = [86 100 41 93 75 61 76 92 88 97] ``` And I want to calculate the `std` and `mean` by myself: ``` >> mean(a) ans = 80.9000 >> std(a)^2 ans = 335.2111 ``` But when I do it like that I get wrong variance: ``` >> avg = mean(a) avg = 80.9000 >> var = sum(a.^2)/length(a) - avg^2 var = 301.6900 ``` What do I miss here ? why `sum(a.^2)/length(a) - avg^2 != std(a)^2` ?

Original source