5

我在 R 中有一个相关矩阵,我想知道有多少组(并将这些组放入向量中)元素之间的相关性超过 95%。

X <- matrix(0,3,5) 
X[,1] <- c(1,2,3)
X[,2] <- c(1,2.2,3)*2
X[,3] <- c(1,2,3.3)*3
X[,4] <- c(6,5,1)
X[,5] <- c(6.1,5,1.2)*4

cor.matrix <- cor(X)
cor.matrix <- cor.matrix*lower.tri(cor.matrix)
cor.vector <- which(cor.matrix>0.95, arr.ind=TRUE)

cor.vector然后包含:

     row col 
[1,]   2   1 
[2,]   3   1 
[3,]   3   2 
[4,]   5   4 

这意味着,正如预期的那样,向量 1,2 和 3 在它们之间具有相关性,还有 4 和 5。

我需要的是获得两个向量c(1,2,3)c(4,5)作为最终结果。

这是一个简单的例子,不过我正在处理大型矩阵。

4

1 回答 1

5

这是一种使用igraph包的方法:

require(igraph)
g <- graph.data.frame(cor.vector, directed = FALSE)
split(unique(as.vector(cor.vector)), clusters(g)$membership)
# $`1`
# [1] 2 3 1

# $`2`
# [1] 5 4

这本质上是在图 g(断开的集合)中找到集群,如下图所示。由于顶点用于按照您输入的顺序(从您的cor.vector)创建图形,因此聚类顺序也以相同的顺序返回。即:对于顶点 c(2,3,5,1,4),簇为 c(1,1,2,1,2),共有两个簇(簇 1 和簇 2)。因此,我们只是使用它来使用集群组进行拆分。

在此处输入图像描述

于 2013-04-25T13:03:07.033 回答