首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未能复制协方差矩阵

未能复制协方差矩阵
EN

Stack Overflow用户
提问于 2019-08-21 13:27:01
回答 2查看 57关注 0票数 1

我试图为生成的数据复制协方差矩阵。

代码语言:javascript
复制
 set.seed(1)
 datam <- round((matrix((rnorm(300, mean = 2, sd = 0.5)), nrow = 100, ncol = 
 3)), digits = 2)

要做到这一点,我应该将这个矩阵的转置乘以原来的矩阵,然后再乘以1/n,其中n=100和transpose如下

代码语言:javascript
复制
datamT <- t(datam)

所以,

代码语言:javascript
复制
datamT%*%datam*1/100 

无法复制数据的协方差矩阵,该矩阵最初由

代码语言:javascript
复制
cov(datam) 

我不知道哪里出了差错,所以我们会感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-21 13:40:08

您需要减去该列的平均值,才能使近似有效。

代码语言:javascript
复制
x <- datam-rep(colMeans(datam),each=nrow(datam))
## or use scale(datam, scale=FALSE)

t(x)%*%x/(nrow(x)-1)
              [,1]          [,2]         [,3]
[1,]  0.2015461010 -0.0001247677  0.004172283
[2,] -0.0001247677  0.2289751111 -0.012216242
[3,]  0.0041722828 -0.0122162424  0.266885848

t(x)%*%x/(nrow(x)-1)-cov(datam)
              [,1]          [,2]         [,3]
[1,] -1.387779e-16  7.047314e-19 0.000000e+00
[2,]  7.047314e-19 -5.551115e-17 0.000000e+00
[3,]  0.000000e+00  0.000000e+00 1.110223e-16
票数 2
EN

Stack Overflow用户

发布于 2019-08-21 13:40:26

我认为您需要看一看协方差这里。中的公式,它是每一行偏离均值的平均值的平均值。如果它是一个样本协方差,那么您使用n-1而不是n.To复制它,

代码语言:javascript
复制
var_cov_matrix <- data.frame()

for(i in 1:ncol(datam)){ 
    for(j in 1:ncol(datam)) {

        var_cov_matrix[i,j] <-sum((datam[,i]- mean(datam[,i])) * (datam[,j]- mean(datam[,j])))/(nrow(datam)-1)



    }

}

             V1            V2           V3
1  0.2015461010 -0.0001247677  0.004172283
2 -0.0001247677  0.2289751111 -0.012216242
3  0.0041722828 -0.0122162424  0.266885848

这和cov(datam)一样,

代码语言:javascript
复制
              [,1]          [,2]         [,3]
[1,]  0.2015461010 -0.0001247677  0.004172283
[2,] -0.0001247677  0.2289751111 -0.012216242
[3,]  0.0041722828 -0.0122162424  0.266885848
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57592776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档