Codar
下载

WGCNA 加权基因共表达网络分析

WGCNA(Weighted Gene Co-expression Network Analysis)根据基因在样本间的表达相关性构建加权网络,把共同升降的基因聚成模块,用模块特征基因(模块表达的第一主成分)与表型做关联,找出和性状最相关的模块及其中的 hub 基因。它关注的是「哪一群基因一起变化、整体和什么性状有关」,适合样本较多、表型连续或多分组的数据。典型输入是 bulk RNA-seq 或芯片的标准化表达矩阵加样本性状表,标准实现是 R 包 WGCNA。

什么时候用

  • 样本数较多的转录组,希望找到与表型变量相关的基因群
  • 表型是连续变量,如体重、某项生化指标、药物浓度或时间点
  • 差异基因很多,需要压缩成少数几个功能单元来解释
  • 从与性状最相关的模块中挑选 hub 基因作为实验候选
  • 比较两种条件或两个数据集之间模块是否保守

不适合的情况

  • 样本少于 15 个,官方 FAQ 不建议使用,相关系数噪声过大
  • 只用差异基因建网,会破坏网络结构并夸大模块与分组的相关
  • 直接用单细胞稀疏计数矩阵,零值主导相关,应改用基于 metacell 的方法

需要准备的数据

表达矩阵
样本 × 基因,已标准化的 log 尺度数据,如 DESeq2 的 vst 结果或芯片 RMA 值,不用原始 count
性状表
行名与表达矩阵样本一致;分类变量拆成 0/1 哑变量,连续变量保留原值
基因筛选规则
常按方差或中位绝对偏差保留前 5000–10000 个基因,并去除低表达基因
批次信息
存在批次时需在建网前校正,否则模块会按批次划分

分析步骤

  1. 1

    过滤与样本质控

    去除低表达基因,按变异度保留数千个基因;用 goodSamplesGenes() 检查缺失值和零方差基因。对样本做层次聚类,剔除明显离群的样本,并在方法中写明剔除依据。

  2. 2

    选择软阈值

    用 pickSoftThreshold() 计算不同 power 下的无标度拟合 R² 和平均连接度,选 R² 首次达到约 0.8–0.85 的最小 power。若始终达不到,先排查批次效应或离群样本。

  3. 3

    构建网络识别模块

    常用 blockwiseModules() 一步完成邻接矩阵、TOM、动态剪切树和模块合并。检查树状图下的颜色条是否与分支对应;灰色是未分配基因,占比过高说明参数或数据有问题。

  4. 4

    模块-性状关联

    计算每个模块特征基因与各性状的相关系数及 P 值并画热图。挑选相关绝对值高且 P 值小的模块,同时排除那些与批次、RNA 质量等技术变量强相关的模块。

  5. 5

    计算 GS 与 MM

    基因显著性(GS)是基因与性状的相关,模块成员度(MM,即 kME)是基因与模块特征基因的相关。在目标模块画 MM-GS 散点图,二者正相关说明模块核心基因也与性状相关。

  6. 6

    筛选 hub 基因

    常用经验阈值是 |MM|>0.8 且 |GS|>0.2,也可按模块内连接度取前若干个。hub 列表再与差异分析、PPI 网络或外部数据取交集,缩小到少数优先验证的候选。

  7. 7

    注释与导出网络

    对目标模块基因做 GO/KEGG 富集,确认模块有一致的功能主题;用 exportNetworkToCytoscape() 按 TOM 阈值导出边表和节点表,用于网络可视化。

关键参数与决策

软阈值 power

R² 达不到时,WGCNA FAQ 给出按样本数取值的经验表,如无符号网络在 40 个样本以上约取 6,样本越少取值越高,signed 网络约为其两倍。

networkType

unsigned 把正负相关都视为连接,signed 只把正相关视为强连接。若希望模块内基因同向变化、便于解释,常选 signed 或 signed hybrid,并相应提高 power。

minModuleSize

最小模块基因数,常设 20–30。设得过小会产生大量碎片化小模块,设得过大则会把有意义的小模块并入灰色。

mergeCutHeight

特征基因相异度低于该值的模块会被合并,blockwiseModules 默认 0.15,即相关约 0.85 以上合并。模块过多且彼此相似时可调到 0.25 左右。

maxBlockSize

分块计算的基因上限,默认 5000。内存允许时设为大于基因总数,避免分块造成同一共表达群被拆进不同块。

deepSplit

动态剪切树的灵敏度,取 0–4,默认 2。值越大模块越多越小,一般在 2 附近调整,并观察模块数量和灰色比例的变化。

常见错误

  • 用未经 log 转换的 count 或 TPM 建网:高表达基因主导相关性,模块反映的是表达量高低,而不是共调控关系。
  • 先筛差异基因再做 WGCNA:网络被分组信号主导,几乎必然得到与分组强相关的模块,属于循环论证,官方 FAQ 明确不建议。
  • cor 函数被其他包覆盖:加载多个包后 cor 可能冲突导致报错,常见做法是在脚本开头写 cor <- WGCNA::cor,结束后恢复。
  • 分类性状用 1、2、3 编码直接做相关:数值大小被当成顺序,结果没有意义,应拆成多个 0/1 变量分别计算。
  • 只看模块-性状热图上 P 值最小的一格:样本少时显著性很脆弱,应同时看相关系数大小以及 MM-GS 关系是否一致。
  • 把 hub 基因直接写成关键调控因子:hub 只是共表达网络中连接度高,不代表因果或调控关系,需要实验证据支持。

结果怎么看

软阈值选择图

左图是不同 power 下的无标度拟合 R²,右图是平均连接度。选 R² 达标的最小 power;若 R² 一直很低,或高 power 下平均连接度仍极高,提示存在离群样本或强批次效应。

基因聚类树与模块颜色

树状图下方的颜色条代表模块。理想情况下同一分支对应同一颜色;灰色占比过大,如超过一半,说明多数基因没有形成稳定模块,需要检查过滤规则和 power。

模块-性状相关热图

每格给出模块特征基因与性状的相关系数和 P 值。重点关注相关绝对值高且 P 值小的模块,同时看它与技术变量的关联;与技术变量也强相关的模块,结论要保守。

MM-GS 散点图

横轴为模块成员度,纵轴为基因显著性。点云明显正相关,说明越核心的基因与性状越相关,模块-性状关联更可信;若无相关,热图上的显著可能只是偶然。

模块特征基因关系图

用 plotEigengeneNetworks() 画模块特征基因的聚类树和相关热图,可把性状一起放入。彼此高度相关的模块往往代表同一过程,可考虑合并;与性状聚在同一分支的模块是重点。

和相近方法怎么选

WGCNA 与差异表达分析

差异分析逐个基因比较两组,得到单基因的变化;WGCNA 利用全部样本的相关结构找协同变化的基因群,适合连续性状和多分组。两者常联用:模块基因与差异基因取交集,缩小候选范围。

WGCNA 与 PPI 网络

WGCNA 的边来自本数据的表达相关,反映共表达;PPI 的边来自数据库收录的蛋白互作,与本数据无关。前者适合发现数据驱动的模块,后者适合为候选基因补充已知互作证据。

WGCNA 与 hdWGCNA

单细胞数据过于稀疏,直接计算相关会被零值主导。hdWGCNA 先把相似细胞聚合为 metacell,再沿用 WGCNA 框架建网,适合在特定细胞类型内寻找共表达模块。

常见问题

WGCNA 需要多少样本?

WGCNA 官方 FAQ 认为少于 15 个样本时不建议使用,20 个以上结果更稳定。样本越少,相关系数越不可靠,模块越容易被噪声或个别离群样本驱动。

软阈值 R² 达不到 0.8 怎么办?

先检查数据:是否有离群样本、批次效应,或强烈的分组效应让大量基因同时升降。排除这些原因后仍达不到,可参照官方 FAQ 按样本数给出的经验 power,并在方法中说明。

WGCNA 的 hub 基因怎么筛选?

常见做法是在目标模块中按 |MM|>0.8 且 |GS|>0.2 筛选,或按模块内连接度取前 10 个。这些是经验值,可按模块大小调整;筛出后最好与 PPI、差异分析结果取交集。

灰色模块是什么意思?

灰色模块收纳的是没有被分配到任何模块的基因,并不是真正的共表达模块,不应拿去做性状关联或富集分析。灰色基因比例很高时,需要回头调整过滤规则和网络参数。

做 WGCNA 之前需要去批次吗?

需要。批次带来的系统差异会让大量基因同步升降,被识别成一个或多个模块,并与批次分布相同的性状产生虚假相关。可在建网前用 ComBat 或 limma 的 removeBatchEffect 处理。

在 Codar 里怎么做

在 Codar 中,上传标准化表达矩阵和样本性状表,Codar 会先确认基因过滤规则、网络类型和要关联的性状,再完成离群样本检查、软阈值选择、模块识别、模块-性状关联、GS 与 MM 计算和 hub 基因筛选。交付软阈值图、模块树、模块-性状热图、MM-GS 散点图、hub 基因表、报告和脚本。

可以这样提问
我有 48 个小鼠肝脏样本的 vst 表达矩阵,以及体重、空腹血糖、肝脏甘油三酯等表型,想用 WGCNA 找与肝脂最相关的模块和 hub 基因。
了解网络与系统生物学插件