2010-07-15 25 views
2

Compte tenu des données de la matrice de données de dimensions M et N échantillons, disons,Pourquoi la fonction native MAT de covL (covariance matrix calcul) utilise-t-elle un diviseur différent de celui que j'attends?

data = randn(N, M); 

je pourrais calculer la matrice de covariance avec

data_mu = data - ones(N, 1)*mean(data); 
cov_matrix = (data_mu'*data_mu)./N 

Si j'utilise la fonction Matlab native

cov_matrix2 = cov(data) 

ce sera toujours égal à

cov_matrix = (data_mu'*data_mu)./(N-1) 

Autrement dit, le dénominateur est (N - 1) est un de moins.

Pourquoi? Pouvez-vous le reproduire? Est-ce un bug ?? J'utilise la version 7.6.0.324 de MATLAB (2008).

+0

Aucun moyen Matlab laisserait un "bug" comme ça glisser par eux. Il y a une raison pour 'N-1', laissez-moi le trouver. http://www.newton.dep.anl.gov/newton/askasci/1993/math/MATH014.HTM http://wiki.answers.com/Q/Why_is_the_standard_deviation_calculation_for_populations_different_than_for_samples_and_why_is_the_denominator_'n'_or_'n-1 ' –

+0

C'est probablement Cela dépend de la 'variance de l'échantillon (co) ou de la (co) variance de la population. Pour les grands N ils sont assez proches, mais vous devez faire attention avec petit N. –

Répondre

9

Autrement dit, le dénominateur est (N - 1) est un de moins. Pourquoi ?? Pouvez-vous le reproduire? Est-ce un bug ??

Voir le cov documentation. Il a à voir avec population variance vs. sample variance.

Notez également que si vous souhaitez utiliser le dénominateur N au lieu de N-1, vous pouvez ajouter un argument 1 de fuite à l'appel, à savoir cov(x,y,1) ou cov(x,1) selon la documentation.

+0

ha, je ne peux évidemment pas lire. J'ai fait 'help cov' avant de poster ceci. Merci. – Fredriku73

0

n-1 est le dénominateur correct à utiliser dans le calcul de la variance. C'est ce qu'on appelle la correction de Bessel (http://en.wikipedia.org/wiki/Bessel%27s_correction) En termes simples, 1/(n-1) produit une estimation attendue plus précise de la variance que 1/n.