BioF3 组学数据分析
08 表观组与转录组的整合
08 表观组与转录组的整合
表观修饰(开放染色质、TF 结合、甲基化)最终要通过影响基因表达来发挥功能。把表观组数据和转录组数据放在一起看,能回答"哪些表观变化真正驱动了表达变化"。
常见整合策略
| 策略 | 输入 | 输出 | 工具 |
|---|---|---|---|
| Peak-gene 关联 | 差异 peak + 差异基因 | 重叠基因列表 | ChIPseeker + 自定义脚本 |
| 相关性分析 | peak 信号矩阵 + 表达矩阵 | peak-gene 相关性 | cor.test / LOLA |
| 调控网络推断 | motif + 表达 + peak | TF → target 网络 | SCENIC / pySCENIC |
| 多组学因子分析 | 多层矩阵 | 共变因子 | MOFA2 / mixOmics |
Peak-gene 关联(最简单)
library(ChIPseeker)
# 差异 peak 注释到最近基因
db_anno <- annotatePeak(db_peaks, TxDb = txdb)
db_genes <- unique(as.data.frame(db_anno)$SYMBOL)
# 差异基因(来自 DESeq2)
de_genes <- res_df$SYMBOL[res_df$padj < 0.05]
# 交集
overlap <- intersect(db_genes, de_genes)
cat("Overlap:", length(overlap), "genes\n")
# Fisher 检验看是否显著富集
fisher.test(matrix(c(
length(overlap),
length(setdiff(db_genes, de_genes)),
length(setdiff(de_genes, db_genes)),
total_genes - length(union(db_genes, de_genes))
), nrow = 2))
如果 overlap 显著大于随机期望,说明表观变化和表达变化确实有关联。
方向一致性检查
更严格的验证:不仅看"有没有重叠",还看"方向是否一致":
# 合并 peak FC 和 gene FC
merged <- inner_join(
data.frame(gene = db_genes_df$SYMBOL, peak_fc = db_genes_df$Fold),
data.frame(gene = de_df$SYMBOL, rna_fc = de_df$log2FoldChange)
)
# 散点图:peak FC vs RNA FC
ggplot(merged, aes(x = peak_fc, y = rna_fc)) +
geom_point() +
geom_smooth(method = "lm") +
labs(x = "Peak log2FC (ChIP/ATAC)", y = "RNA log2FC")
正相关 = 开放区域增加的基因表达也增加(符合预期)。如果是甲基化数据,启动子区域应该是负相关(甲基化增加 → 表达下降)。
SCENIC:从 scATAC + scRNA 推断调控网络
如果有配对的单细胞数据(10x Multiome 或分别测的 scRNA + scATAC),SCENIC+ 能推断出"哪个 TF 通过哪个增强子调控哪个基因":
# Python (pySCENIC+)
import scenicplus
# 输入:scRNA AnnData + scATAC AnnData + motif 数据库
# 输出:TF → enhancer → gene 的三元组网络
这是目前单细胞表观组整合的最前沿方向,计算量大但信息量也最大。
实用建议
- 先做简单的 peak-gene overlap,确认方向一致性
- 如果 overlap 显著且方向一致,再做更复杂的网络推断
- 多组学整合的结果要用独立实验验证(比如 CRISPRi 敲掉某个增强子看表达是否下降)
- 不要过度解读"相关性 = 因果性"