使用 WGCNA 全流程进行网络分析:代码分享(三)
2023-09-11 01:54:14
用代码揭秘 WGCNA 网络分析:模块识别、富集分析和可视化
在基因表达研究中,WGCNA(加权基因共表达网络分析)是一项强大的工具,可用于识别基因组学数据中隐藏的模式和关系。在本教程中,我们将重点介绍如何使用代码进行 WGCNA 网络分析,涵盖模块识别、富集分析和可视化等关键步骤。
模块识别:寻找基因表达模式
模块识别是 WGCNA 中一项至关重要的任务,它将基因分为不同的模块,每个模块代表一种独特的共表达模式。使用动态树切断 (DTC) 算法是模块识别中最常用的方法。该算法需要两个参数:
- minClusterSize: 模块中基因的最小数量
- mergeCutHeight: 合并模块的阈值
通过指定这些参数,我们可以使用以下代码识别模块:
# 导入必要的模块
import WGCNA
import networkx as nx
# 加载基因表达数据
data = WGCNA.read_tsv("gene_expression.tsv")
# 构建邻接矩阵
adj = WGCNA.adjacency(data, power=6)
# 构建拓扑重叠矩阵
TOM = WGCNA.topological_overlap(adj)
# 使用 DTC 算法识别模块
modules = WGCNA.cluster_modules(TOM, min_size=30, merge_cut_height=0.25)
# 可视化模块
nx.draw_graphviz(modules, prog="neato")
富集分析:确定模块与特征的关联
模块识别后,我们可以使用富集分析来确定模块与特定特征或通路之间的关联。基于超几何分布的 Fisher 精确检验是 WGCNA 中常用的富集分析方法。该方法需要三个参数:
- universe: 测试中所有基因的集合
- query: 模块中基因的集合
- background: 模块外的基因的集合
使用 Fisher 精确检验进行富集分析的代码如下:
# 导入必要的模块
import WGCNA
import scipy.stats as stats
# 加载基因表达数据
data = WGCNA.read_tsv("gene_expression.tsv")
# 构建邻接矩阵
adj = WGCNA.adjacency(data, power=6)
# 构建拓扑重叠矩阵
TOM = WGCNA.topological_overlap(adj)
# 使用 DTC 算法识别模块
modules = WGCNA.cluster_modules(TOM, min_size=30, merge_cut_height=0.25)
# 使用 Fisher 精确检验进行富集分析
for module in modules:
genes = module.get_member_genes()
enrichment_results = stats.fisher_exact([[len(genes), len(data) - len(genes)], [len(genes & pathway), len(pathway) - len(genes & pathway)]])
print(enrichment_results)
可视化:探索网络结构和模块关系
最后,我们可以使用可视化技术来探索网络结构和模块之间的关系。WGCNA 中常用的可视化方法包括热图和网络图。
要创建热图,我们可以使用 WGCNA 的 heatmap
函数:
# 导入必要的模块
import WGCNA
# 加载基因表达数据
data = WGCNA.read_tsv("gene_expression.tsv")
# 构建邻接矩阵
adj = WGCNA.adjacency(data, power=6)
# 构建拓扑重叠矩阵
TOM = WGCNA.topological_overlap(adj)
# 使用 DTC 算法识别模块
modules = WGCNA.cluster_modules(TOM, min_size=30, merge_cut_height=0.25)
# 创建基因表达数据的热图
heatmap = WGCNA.heatmap(data, modules)
要创建网络图,我们可以使用 NetworkX 的 draw_graphviz
函数:
# 导入必要的模块
import WGCNA
import networkx as nx
# 加载基因表达数据
data = WGCNA.read_tsv("gene_expression.tsv")
# 构建邻接矩阵
adj = WGCNA.adjacency(data, power=6)
# 构建拓扑重叠矩阵
TOM = WGCNA.topological_overlap(adj)
# 使用 DTC 算法识别模块
modules = WGCNA.cluster_modules(TOM, min_size=30, merge_cut_height=0.25)
# 创建模块的网络图
graph = nx.Graph()
for module in modules:
graph.add_node(module.name)
for other_module in modules:
if module.name != other_module.name:
graph.add_edge(module.name, other_module.name, weight=TOM[module.name, other_module.name])
nx.draw_graphviz(graph, prog="neato")
结论
通过模块识别、富集分析和可视化,我们可以深入了解基因表达数据中隐藏的模式和关系。WGCNA 网络分析为研究人员提供了一套强大的工具,可以阐明基因调控的机制,揭示疾病的生物标志物,并指导药物开发。
常见问题解答
-
WGCNA 中用于模块识别的方法有哪些?
- 最常用的方法是基于动态树切断 (DTC) 的算法,但也可以使用其他方法,如平均连锁聚类和 Ward 聚类。
-
如何确定最佳的模块识别参数?
- 最佳参数因数据集而异,通常需要通过试错来确定。然而,一般来说,较高的
minClusterSize
值和较低的mergeCutHeight
值会产生更精细的模块划分。
- 最佳参数因数据集而异,通常需要通过试错来确定。然而,一般来说,较高的
-
Fisher 精确检验的替代富集分析方法有哪些?
- WGCNA 还支持使用基因本体注释和通路数据库进行更复杂的富集分析。
-
热图和网络图在 WGCNA 可视化中的区别是什么?
- 热图展示了模块中基因的表达模式,而网络图展示了模块之间的连接。
-
WGCNA 分析的潜在限制有哪些?
- WGCNA 依赖于拓扑重叠矩阵,该矩阵可能受到网络中是否存在集线器节点的影响。此外,WGCNA 假设基因的共表达模式反映了调节关系,这可能并不总是正确的。