2010-07-15 5 views
2

는 I 네이티브 MATLAB 함수를 사용하는 경우MATLAB 고유 함수 cov (공분산 행렬 계산)가 예상했던 것보다 다른 제수를 사용하는 이유는 무엇입니까?

data = randn(N, M); 

제가

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

와 공분산 행렬을 계산할 수 M 기준 및 N 샘플, 말의 데이터 행렬 데이터 주어

cov_matrix2 = cov(data) 

이것은 항상

cov_matrix = (data_mu'*data_mu)./(N-1) 
와 같습니다.

즉, 분모는 (N - 1)이 1입니다.

왜 ?? 그것을 재현 할 수 있습니까? 이게 버그 야?

저는 MATLAB 버전 7.6.0.324 (2008)를 사용합니다.

+0

어쨌든 Matlab은 그와 같은 "버그"를 내버려 두지 않을 것입니다. 'N-1'에 대한 이유가 있습니다. 찾게하십시오. 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

아마도 당신이'sample (co) variance' 또는'population (co) variance'를보고 있는지에 달려 있습니다. 큰 N을 위해 그들은 꽤 가깝다. 그러나 당신은 작은 N. –

답변

9

즉, 분모는 (N - 1)이 1입니다. 왜? 그것을 재현 할 수 있습니까? 이게 버그 야?

cov documentation을 참조하십시오. 그것은 population variance vs. sample variance와 관련이 있습니다. 당신이 N-1의 분모 N 대신 사용하고자하는 경우

참고 또한, 당신은 문서에 따라 통화에 cov(x,y,1) 또는 cov(x,1), 즉 후행 1 인수를 추가 할 수 있습니다.

+0

하와 조심해야한다, 나는 명백하게 읽을 수 없다. 나는 이것을 게시하기 전에 '도움 cov'를했다. 감사. – Fredriku73

0

n-1은 분산 계산에 사용할 올바른 분모입니다. Bessel 's correction (http://en.wikipedia.org/wiki/Bessel%27s_correction) 간단히 말해 1/(n-1)은 1/n보다 더 정확한 예상 분산 추정치를 산출합니다.

관련 문제