返回

使用 WGCNA 全流程进行网络分析:代码分享(三)

见解分享

用代码揭秘 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 网络分析为研究人员提供了一套强大的工具,可以阐明基因调控的机制,揭示疾病的生物标志物,并指导药物开发。

常见问题解答

  1. WGCNA 中用于模块识别的方法有哪些?

    • 最常用的方法是基于动态树切断 (DTC) 的算法,但也可以使用其他方法,如平均连锁聚类和 Ward 聚类。
  2. 如何确定最佳的模块识别参数?

    • 最佳参数因数据集而异,通常需要通过试错来确定。然而,一般来说,较高的 minClusterSize 值和较低的 mergeCutHeight 值会产生更精细的模块划分。
  3. Fisher 精确检验的替代富集分析方法有哪些?

    • WGCNA 还支持使用基因本体注释和通路数据库进行更复杂的富集分析。
  4. 热图和网络图在 WGCNA 可视化中的区别是什么?

    • 热图展示了模块中基因的表达模式,而网络图展示了模块之间的连接。
  5. WGCNA 分析的潜在限制有哪些?

    • WGCNA 依赖于拓扑重叠矩阵,该矩阵可能受到网络中是否存在集线器节点的影响。此外,WGCNA 假设基因的共表达模式反映了调节关系,这可能并不总是正确的。