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

Учитывая данные матрицы данных 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).

Ответы [ 2 ]

9 голосов
/ 15 июля 2010

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

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

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

0 голосов
/ 20 декабря 2010

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

...