方差-协方差矩阵:cov(X) 和 t(X)X(1/n-1) 之间的差异
Variance-covariance matrix : difference between cov(X) and 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() 来做到这一点,效果很好。但是,当我真的想知道如何计算方差-协方差矩阵时,我偶然发现了 its definition,它在 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 = `-`)
首先,让我们直截了当地说:我不是数学家或统计学家。
问题来了。 我想计算一组值的方差-协方差矩阵。这些值存储在矩阵中,例如:
M <- matrix(c(1,2,3,4,
2,4,6,8,
4,8,12,16),3,4, byrow = TRUE)
计算方差-协方差矩阵的原因是我想使用mvrnorm()来生成模拟的多元数据。在我真正的问题中,我使用 cov() 来做到这一点,效果很好。但是,当我真的想知道如何计算方差-协方差矩阵时,我偶然发现了 its definition,它在 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 = `-`)