在R中手动创建此协方差矩阵

时间:2016-09-27 06:42:06

标签: r matrix statistics covariance

我有两个长度为1000的样本,我需要为这两个样本构建协方差矩阵。

每个样本由10个大小为100的簇组成。现在,每个单元都附有一个变量,用于标识它来自的簇,如果它们来自同一个簇,则两个单元之间的协方差为X,如果它们来自不同的集群,则为Y.

所以我需要找到一种方法来构建一个看起来像下图的协方差矩阵,除了X的块是100x100而不是3x3:

enter image description here

有没有方法可以轻松完成这项工作?矩阵太大而无法通过手动输入数据来创建它,并且该过程需要在循环内重复数千次。

2 个答案:

答案 0 :(得分:0)

你的意思是这样的吗?

m <- c(rep(1, 100), rep(0, 300),
   rep(0, 100), rep(1, 100), rep(0, 200),
   rep(0, 200), rep(1, 100), rep(0, 100),
   rep(0, 300), rep(1, 100))
m <- matrix(m, byrow = TRUE)
m

答案 1 :(得分:0)

我设法找到一个简单的解决方案,不需要额外的包,所以我会在这里发布解决方案以防其他人遇到同样的问题。

对我来说最简单的方法是创建一个双循环,遍历矩阵的每个索引并手动输入项目。显然这在计算上非常详尽,所以如果你需要多次这样做,我建议使用更有效的方法。

    m<-matrix(rep(NA,1000000),ncol=1000)

for(i in 1:1000){
    for(j in 1:1000){
       if(sampleA$cluster[i]==sampleA$cluster[j]){
           m[i,j]<-"X"
           }
       else{
           m[i,j]<-"Y"
   }
}
}