我正在处理R中的一个小而简单的矩阵,以显示使用(cov)
函数与使用公式(1/n-1) * (t(x) %*% as.matrix(x) - n %*% Ybar * (t(Ybar)
的方差-协方差矩阵的数学计算之间的比较
以下是我正在使用的数据供参考:
> dput(x)
structure(c(1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L,
2L, 3L, 4L, 5L, 6L), .Dim = c(6L, 3L))
当我运行x.cov <- cov(x)
时,它返回一个3 x 3矩阵,所有值=3.5
下面的代码是我使用计算公式来获得方差-协方差矩阵的代码,但它返回了一个错误,说明";在t(x(%%as矩阵(x(-6%%x.meanvec%*%t(x.meanvec(:不一致数组";
one <- rep(1, 6)
x.meanvec <- (1/6) * t(one) %*% as.matrix(x)
matrix.t <- (1/5) * (t(x) %*% as.matrix(x) - 6 %*% x.meanvec %*% t(x.meanvec))
如何修复公式以避免此错误?
我不理解你的公式,也不相信它是正确的。
我会这么做:
(1/5) * (t(x - one %*% x.meanvec) %*% (x - one %*% x.meanvec))
或者更有效:
1/5 * crossprod(x - one %*% x.meanvec)