我有两个长度为1000的样本,我需要为这两个样本构建协方差矩阵。
每个样本由10个大小为100的簇组成。现在,每个单元都附有一个变量,用于标识它来自的簇,如果它们来自同一个簇,则两个单元之间的协方差为X,如果它们来自不同的集群,则为Y.
所以我需要找到一种方法来构建一个看起来像下图的协方差矩阵,除了X的块是100x100而不是3x3:
有没有方法可以轻松完成这项工作?矩阵太大而无法通过手动输入数据来创建它,并且该过程需要在循环内重复数千次。
答案 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"
}
}
}