03 DiffBind 差异结合分析
03 DiffBind 差异结合分析
ChIP-seq 的差异分析和 RNA-seq 思路一样:把每个 peak 在每个样本里的 reads 数当作"表达量",用 DESeq2 或 edgeR 做统计检验。DiffBind 把这条流程封装成几个函数,从 peak 文件 + BAM 到差异结合位点一步到位。
本章用 DiffBind 自带的 tamoxifen 数据演示:11 个乳腺癌细胞系的 ER(雌激素受体)ChIP-seq,分为 Responsive(对他莫昔芬敏感)和 Resistant(耐药)两组。
真实示例
配套脚本 epi03_diffbind_sci.R 在 tamoxifen 数据上跑完整的差异结合分析:
Rscript scripts/epigenomics/epi03_diffbind_sci.R
每张图看什么
图 1:样本间 binding affinity 的相关性热图。同一条件的样本应该聚在一起。
图 2:PCA 按条件着色。Responsive 和 Resistant 在 PC1 上分开。
图 3:MA plot。红点是 FDR < 0.05 的差异结合位点。
图 4:火山图。横轴 log2FC,纵轴 -log10(FDR)。
图 5:差异结合位点的 binding affinity 热图。每行一个 peak,每列一个样本。
图 6:差异位点按方向分:Gained(Responsive 里更强)vs Lost(Resistant 里更强)。
核心代码
library(DiffBind)
data(tamoxifen_counts)
# 设置对比
tamoxifen <- dba.contrast(tamoxifen, categories = DBA_CONDITION)
# 差异分析(DESeq2 后端)
tamoxifen <- dba.analyze(tamoxifen, method = DBA_DESEQ2)
# 提取结果
db_report <- dba.report(tamoxifen)
为什么不直接用 DESeq2 而要走 DiffBind
DESeq2 输入要"行 = 基因"的固定矩阵,而 ChIP / ATAC 不同样本的 peak 集合是不一样的。要做差异分析必须先建一个所有样本共用的 consensus peak set,再在每个 peak 上数 reads。DiffBind 把这一步封装了:
dba()读 sample sheet → 知道每个样本的 BAM + peakdba.count()在 consensus peaks 上数 reads,得到 peak × sample 矩阵dba.analyze()把这个矩阵交给 DESeq2 / edgeR 做差异
后端就是 DESeq2 / edgeR — 你也可以自己跑,但 DiffBind 处理了 consensus peak 构建、normalization(reads-in-peak vs library-size)、blacklist 过滤等细节。新项目直接用 DiffBind,自己拼这套很容易出错。
常见坑
坑 1:sample sheet 的 BAM 路径写错
DiffBind 的 sample sheet 里要求 bamReads 列指向已经去重 / 过滤好的 BAM。不是原始 BAM,否则 reads-in-peak 计数被 PCR duplicate / 低 MAPQ reads 污染。先做完 Picard MarkDuplicates + samtools view -q 30 再喂给 DiffBind。
坑 2:normalization 选错
DiffBind 默认按 library size 归一化,但 ChIP-seq 一些情况下应该按 reads-in-peak 归一化(spike-in 实验、或样本间总信号变化大时)。dba.normalize(method = DBA_NORM_RLE / DBA_NORM_TMM / DBA_NORM_LIB) 三个选项各有适用场景,看 vignette 不要直接用默认。
坑 3:consensus peaks 用了所有样本的并集
默认 minOverlap = 2 意味着一个 peak 至少在 2 个样本里出现才进 consensus。如果你只想保留高置信 peak,提高到 minOverlap = (n_samples / 2) + 1,结果更稳。
坑 4:FDR 阈值不区分 ChIP / ATAC
ChIP-seq DB 通常 FDR < 0.05 + |FC| > 1 就够;ATAC-seq 信号更稀疏,可以放到 FDR < 0.1。死磕 0.05 在 ATAC 上经常 0 个 DB peak,不是分析做错了。
坑 5:Greylist 没用
Greylist(区域级别的"看上去像 peak 但其实是噪声"区域)和 Blacklist 不同。DiffBind 默认会调用 GreyListChIP,需要联网下载参考。国内有时下载慢,可以预先下载好 cached。
下一步
接着深入:
- 04 Peak 可视化与多样本比较 — DiffBind 输出做成可发表的图
- 05 Motif 富集与 HOMER — 差异 peak 富集了什么 TF motif
横向延伸:
- bulk RNA-seq 02 DESeq2 — DiffBind 后端就是 DESeq2,看一遍 RNA-seq 那边对理解 DiffBind 大有帮助
- 08 表观组与转录组的整合 — 差异 peak 的最终意义在于和差异基因的关系