为什么MATLAB本机函数cov(协方差矩阵计算)使用与我预期不同的除数?

时间:2010-07-15 14:53:55

标签: matlab covariance

给出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 个答案:

答案 0 :(得分:9)

  

也就是说,分母是(N-1)少一个。   为什么??你能重现吗?这是一个错误吗?

请参阅cov documentation。它与population variance vs. sample variance有关。

另请注意,如果您希望使用分母N而不是N-1,则可以在调用中添加尾随1参数,即cov(x,y,1)cov(x,1)文档。

答案 1 :(得分:0)

n-1是用于计算方差的正确分母。 这就是所谓的贝塞尔校正(http://en.wikipedia.org/wiki/Bessel%27s_correction) 简单地说,1 /(n-1)产生比1 / n更准确的预期方差估计。