如何在R中找出相关矩阵中所有互相关联的行模块?
提取互相关系数超阈值的行模块实现方案
实现思路
要找出两两互相关系数均超过指定阈值的行组(即「团」,clique),可以借助图论工具:将每行视为节点,两两相关系数超阈值则视为节点间有连接,通过图论库提取最大团即可得到目标模块。
具体代码实现
1. 加载依赖包
首先使用igraph包处理图结构(若未安装需先执行安装命令):
# 安装igraph(首次运行时执行) # install.packages("igraph") library(igraph)
2. 基于样本数据处理
沿用你提供的矩阵生成与相关系数计算代码,接着执行以下步骤:
# 设定阈值 threshold <- 0.2 # 构建邻接矩阵:仅保留两两相关系数>阈值的边,对角线设为0(排除自身关联) adj_mtx <- cor_mtx diag(adj_mtx) <- 0 adj_mtx[adj_mtx <= threshold] <- 0 adj_mtx[adj_mtx > threshold] <- 1 # 转换为无向图对象 g <- graph_from_adjacency_matrix(adj_mtx, mode = "undirected", weighted = FALSE) # 提取所有最大团(无法再添加新节点的完整关联组) max_cliques <- max_cliques(g) # 转换为行名列表,并筛选出包含至少2个行的组 clique_groups <- lapply(max_cliques, function(clique) V(g)$name[clique]) clique_groups <- Filter(function(x) length(x) >= 2, clique_groups)
3. 查看结果
运行上述代码后,clique_groups会返回符合要求的行模块。针对你的样本数据,输出为:
> clique_groups [[1]] [1] "r1" "r5" "r8"
你可以进一步验证组内的相关系数:
cor_mtx[clique_groups[[1]], clique_groups[[1]]]
内容的提问来源于stack exchange,提问作者David_G
相关产品推荐
相关产品推荐

