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 = `-`)
推荐阅读
- c# - 相当于实体框架中的“SELECT NULL AS ColumnName”
- regex - 获取单词上方行中的值
- sql - SQL - 而不是 INSERT 和临时变量
- swift - 如何使函数只能由swift中的特定类调用?
- amazon-web-services - 如何确保仅针对特定路径调用 API Gateway 令牌授权方
- r - 将嵌套的 data.frame 转换为分层列表
- javascript - 过滤具有未知键的对象的最有效方法
- python-3.x - 检查文本中的一个单词并 print() 一次命令
- excel - 如何在初始化期间隐藏某些用户表单字段?
- javascript - 从子组件传递函数后,传递给函数的值以数字而不是对象的形式返回