2013-08-08 8 views
7

Ho un vettore aCome calcolare le varianze campionarie e di popolazione in Matlab?

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

E voglio calcolare la std e mean da me:

>> mean(a) 

ans = 

    80.9000 

>> std(a)^2 

ans = 

    335.2111 

Ma quando lo faccio così ottengo varianza sbagliato:

>> avg = mean(a) 

avg = 

    80.9000 

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

var = 

    301.6900 

Cosa mi manca qui?

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

risposta

8

Prova questo:

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


var = 

    335.2111 

var viene calcolata come campione (non distorta), non varianza della popolazione.

Per una spiegazione completa è possibile leggere here.

Dalla documentazione MATLAB,

VAR normalizza Y da N-1, dove N è la dimensione del campione. Questo è uno stimatore non distorto della varianza della popolazione da cui X è disegnata a , a condizione che X sia costituito da campioni indipendenti, identici distribuiti .

ma

Y = VAR (X, 1) normalizza da N e produce il secondo momento della campione circa la sua media. VAR (X, 0) è lo stesso di VAR (X).

modo che

>> var(a,1) 

ans = 

    301.6900 
2

Un varianza campione imparziale è dato da:

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

ans = 

    335.2111 

enter image description here

Problemi correlati