Как рассчитать дисперсии выборки и популяции в Matlab?
у меня есть вектор a
a = [86 100 41 93 75 61 76 92 88 97]
и я хочу, чтобы вычислить std
и mean
by
сам:
>> mean(a)
ans =
80.9000
>> std(a)^2
ans =
335.2111
но когда я делаю это так, я получаю неправильную дисперсию:
>> avg = mean(a)
avg =
80.9000
>> var = sum(a.^2)/length(a) - avg^2
var =
301.6900
что я пропустил ?
почему sum(a.^2)/length(a) - avg^2 != std(a)^2
?
2 ответов
попробуйте это:
var = sum(a.^2)/(length(a)-1) - (length(a))*mean(a)^2/(length(a)-1)
var =
335.2111
var
вычисляется как (беспристрастная) выборка, а не дисперсия популяции.
для полного объяснения вы можете прочитать здесь.
из документации matlab,
var нормализует Y на N-1, где N-размер выборки. Это несмещенная оценка дисперсии популяции, из которой X тянет, пока X состоит из независимых, одинаково распределенных образцы.
но
Y = VAR (X,1) нормализуется на N и производит второй момент образец о своем среднем. VAR(X,0) совпадает с VAR (X).
, Так что
>> var(a,1)
ans =
301.6900