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
?
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With