我在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)
作为最终结果。
这是一个简单的例子,我正在处理大型矩阵。
答案 0 :(得分:4)
以下是使用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)。因此,我们只是使用它来使用群集组进行拆分。