实验二:加权基因共表达网络分析(WGCNA)
实验简介
WGCNA (Weighted Gene Co-expression Network Analysis) 是一种系统生物学方法,用于描述不同样本间基因关联模式,识别高度协同变化的基因模块。
实验目的
- 理解基因共表达网络的概念
- 掌握 WGCNA 的分析流程
- 学会识别基因模块
- 了解模块与表型的关联分析
理论背景
WGCNA 原理
WGCNA 通过计算基因间的相关性,构建加权网络,并识别功能相关的基因模块。
关键步骤
- 计算相似性矩阵:计算基因间的相关系数
- 构建邻接矩阵:使用软阈值将相关系数转换为连接强度
- 拓扑重叠矩阵(TOM):衡量基因间的连接相似性
- 层次聚类:识别基因模块
- 模块-表型关联:分析模块与表型的相关性
实验步骤
1. 数据准备和预处理
# 加载 WGCNA 包
library(WGCNA)
library(ggplot2)
# 允许多线程
enableWGCNAThreads()
# 读取表达数据
# 行为基因,列为样本
expr_data <- read.csv("expression_data.csv", row.names = 1)
expr_data <- t(expr_data) # 转置:行为样本,列为基因
# 检查缺失值
gsg <- goodSamplesGenes(expr_data, verbose = 3)
# 过滤低表达基因
expr_data_filtered <- expr_data[, gsg$goodGenes]2. 选择软阈值
# 计算不同软阈值下的网络拓扑
powers <- c(c(1:10), seq(from = 12, to = 20, by = 2))
sft <- pickSoftThreshold(expr_data_filtered,
powerVector = powers,
verbose = 5)
# 可视化
par(mfrow = c(1, 2))
plot(sft$fitIndices[,1],
-sign(sft$fitIndices[,3]) * sft$fitIndices[,2],
xlab = "Soft Threshold (power)",
ylab = "Scale Free Topology Model Fit, signed R^2",
type = "n",
main = "Scale independence")
text(sft$fitIndices[,1],
-sign(sft$fitIndices[,3]) * sft$fitIndices[,2],
labels = powers,
col = "red")
abline(h = 0.90, col = "red")3. 构建网络和识别模块
# 一步法构建网络并识别模块
net <- blockwiseModules(expr_data_filtered,
power = 6, # 选择的软阈值
TOMType = "unsigned",
minModuleSize = 30,
reassignThreshold = 0,
mergeCutHeight = 0.25,
numericLabels = TRUE,
pamRespectsDendro = FALSE,
saveTOMs = TRUE,
saveTOMFileBase = "TOM",
verbose = 3)
# 查看模块信息
table(net$colors)
# 转换为颜色标签
moduleColors <- labels2colors(net$colors)4. 可视化基因树和模块
# 绘制基因树和模块
plotDendroAndColors(net$dendrograms[[1]],
moduleColors[net$blockGenes[[1]]],
"Module colors",
dendroLabels = FALSE,
hang = 0.03,
addGuide = TRUE,
guideHang = 0.05)5. 模块与表型关联
# 读取表型数据
traits <- read.csv("traits.csv", row.names = 1)
# 计算模块特征基因(ME)
MEs <- moduleEigengenes(expr_data_filtered, moduleColors)$eigengenes
MEs <- orderMEs(MEs)
# 计算模块与表型的相关性
moduleTraitCor <- cor(MEs, traits, use = "p")
moduleTraitPvalue <- corPvalueStudent(moduleTraitCor, nrow(expr_data_filtered))
# 可视化
textMatrix <- paste(signif(moduleTraitCor, 2), "\n(",
signif(moduleTraitPvalue, 1), ")", sep = "")
dim(textMatrix) <- dim(moduleTraitCor)
par(mar = c(6, 8.5, 3, 3))
labeledHeatmap(Matrix = moduleTraitCor,
xLabels = names(traits),
yLabels = names(MEs),
ySymbols = names(MEs),
colorLabels = FALSE,
colors = blueWhiteRed(50),
textMatrix = textMatrix,
setStdMargins = FALSE,
cex.text = 0.5,
zlim = c(-1,1),
main = "Module-trait relationships")6. 导出网络用于 Cytoscape
# 选择感兴趣的模块
module <- "blue"
genes <- colnames(expr_data_filtered)[moduleColors == module]
# 计算 TOM
TOM <- TOMsimilarityFromExpr(expr_data_filtered[, genes],
power = 6)
# 导出边信息
cyt <- exportNetworkToCytoscape(TOM,
edgeFile = paste("CytoscapeInput-edges-", module, ".txt", sep=""),
nodeFile = paste("CytoscapeInput-nodes-", module, ".txt", sep=""),
weighted = TRUE,
threshold = 0.02)结果分析
模块功能富集
# 对感兴趣的模块进行GO富集分析
library(clusterProfiler)
library(org.Hs.eg.db)
# 提取模块基因
module_genes <- colnames(expr_data_filtered)[moduleColors == "blue"]
# GO富集分析
ego <- enrichGO(gene = module_genes,
OrgDb = org.Hs.eg.db,
keyType = "SYMBOL",
ont = "BP",
pAdjustMethod = "BH",
pvalueCutoff = 0.05,
qvalueCutoff = 0.05)
# 可视化
barplot(ego, showCategory = 10)
dotplot(ego, showCategory = 10)生物学解释
模块的意义
- 同一模块内的基因可能:
- 参与相同的生物学过程
- 受相同的转录调控
- 在相同的细胞器中发挥作用
Hub 基因
- 模块内连接度最高的基因
- 可能是该生物学过程的关键调控因子
- 潜在的生物标志物或治疗靶点
作业要求
- 基础分析
- 完成 WGCNA 分析流程
- 识别基因模块
- 分析模块与表型的关联
- 进阶分析
- 对关键模块进行功能富集分析
- 识别 Hub 基因
- 验证 Hub 基因的表达模式
- 报告撰写
- 详细记录分析步骤
- 展示关键结果图表
- 对模块功能进行生物学解读
文件位置
Grade4/computational_biology/experiments/Exp2/
├── WGCNA.Rmd # R Markdown 报告
├── WGCNA.html # 生成的 HTML 报告
└── data/ # 数据文件
参考资料
Langfelder, P., & Horvath, S. (2008). WGCNA: an R package for weighted correlation network analysis. BMC Bioinformatics, 9(1), 559.
Zhang, B., & Horvath, S. (2005). A general framework for weighted gene co-expression network analysis. Statistical Applications in Genetics and Molecular Biology, 4(1).
提示
Tip软阈值选择
选择使 Scale-free topology fit R² 达到 0.8-0.9 的最小阈值。
Tip模块大小
根据数据集大小调整 minModuleSize 参数,一般设为 30-50。
Warning内存使用
WGCNA 分析可能需要大量内存,建议在分析前清理 R 环境。