Как рассчитать дисперсии выборки и популяции в 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

несмещенная дисперсия выборки задается:

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

ans =

  335.2111

enter image description here