Почему родная функция MATLAB cov (вычисление ковариационной матрицы) использует другой делитель, чем я ожидал?

Учитывая данные матрицы данных M измерений и N выборок, скажем,

data = randn(N, M);

Я мог бы вычислить ковариационную матрицу с помощью

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

Если я использую родную функцию MATLAB

cov_matrix2 = cov(data)

это всегда будет равно

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

То есть знаменатель равен (N - 1) на единицу меньше.

Почему?? Можете ли вы воспроизвести его? Это баг??

Я использую MATLAB версии 7.6.0.324 (2008 г.).


person Fredriku73    schedule 15.07.2010    source источник
comment
Matlab ни за что не пропустит такую ​​​​ошибку. Есть причина для N-1, позвольте мне найти ее. newton.dep.anl.gov/newton/askasci/ 1993/math/MATH014.HTM wiki.answers.com/Q/'или'n-1'   -  person Hamish Grubijan    schedule 15.07.2010
comment
Вероятно, это зависит от того, смотрите ли вы на sample (co)variance или population (co)variance. Для больших N они довольно близки, но вы должны быть осторожны с маленькими N.   -  person Paul R    schedule 15.07.2010


Ответы (2)


То есть знаменатель равен (N - 1) на единицу меньше. Почему?? Можете ли вы воспроизвести его? Это баг??

См. документацию по cov. Это связано с дисперсией генеральной совокупности и дисперсией выборки.

Также обратите внимание, что если вы хотите использовать знаменатель N вместо N-1, вы можете добавить к вызову завершающий аргумент 1, то есть cov(x,y,1) или cov(x,1), как указано в документации.

person Jason S    schedule 15.07.2010
comment
ха, я явно не умею читать. Я сделал «помощь cov», прежде чем публиковать это. Спасибо. - person Fredriku73; 15.07.2010

n-1 является правильным знаменателем для использования в вычислении дисперсии. Это так называемая поправка Бесселя (http://en.wikipedia.org/wiki/Bessel%27s_correction). Проще говоря, 1/(n-1) дает более точную ожидаемую оценку дисперсии, чем 1/n.

person Ju Joh    schedule 20.12.2010