r语言 - 方差-协方差矩阵:cov(X)与t(X)X之差(1/n-1)



首先,让我们澄清一下:我不是数学家或统计学家。

解决问题。我想计算一组值的方差协方差矩阵。这些值存储在一个矩阵中,例如:

M <- matrix(c(1,2,3,4,
2,4,6,8,
4,8,12,16),3,4, byrow = TRUE)

计算方差协方差矩阵的原因是我想使用mvrnorm()来生成模拟的多变量数据。在我的实际问题中,我使用cov()来做到这一点,它工作得很好。但是,当我真的想知道方差-协方差矩阵是如何计算的时候,我偶然发现了它的定义,在R中实现的应该是这样的:

covM <- (t(M) %*% M)*(1/(3-1))

其中3为m中的obs(行)数。

然而,(t(M) %% M)(1/(3-1))对我来说不会产生相同的结果。对于实际问题,它产生的结果与cov(M)几乎相似,但不完全相同。

我做错了或理解错了什么?

你必须把矩阵的列居中,也就是说,减去每列的列均值。一种可能是:

X = t(t(M) - colMeans(M))
(t(X) %*% X)*(1/(3-1))

cov(M)相同。

清洁:

X <- sweep(M, 2, colMeans(M), FUN = `-`)

最新更新