2013-08-08 5 views
7

Ich habe einen Vektor aWie berechnet man Stichproben- und Populationsvarianzen in Matlab?

a = [86 100 41 93 75 61 76 92 88 97] 

Und ich will die std und mean von selbst berechnen:

>> mean(a) 

ans = 

    80.9000 

>> std(a)^2 

ans = 

    335.2111 

Aber wenn ich es so, dass ich falsch Varianz erhalten tun:

>> avg = mean(a) 

avg = 

    80.9000 

>> var = sum(a.^2)/length(a) - avg^2 

var = 

    301.6900 

Was vermisse ich hier?

warum sum(a.^2)/length(a) - avg^2 != std(a)^2?

Antwort

8

Diese Versuchen:

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


var = 

    335.2111 

var wird als (unvoreingenommene) Probe berechnet wird, nicht Populationsvarianz.

Für eine vollständige Erklärung können Sie here lesen.

Von der Matlab-Dokumentation, normalisiert

VAR Y durch N-1, wobei N die Probengröße ist. Dies ist ein unvoreingenommener Schätzer der Varianz der Population, von der X gezeichnet ist, solange X aus unabhängigen, identisch verteilten Stichproben besteht.

aber

Y = VAR (X, 1) normiert durch N und erzeugt den zweiten Moment der um ihren Mittelwert Probe. VAR (X, 0) ist dasselbe wie VAR (X).

so dass

>> var(a,1) 

ans = 

    301.6900 
2

eine unvoreingenommene Stichprobenvarianz ist gegeben durch:

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

ans = 

    335.2111 

enter image description here