跳到主要内容

07 DNA 甲基化分析入门

DNA 甲基化(主要是 CpG 位点的 5-甲基胞嘧啶)是最稳定的表观修饰之一。和 ChIP/ATAC 不同,甲基化分析不做 peak calling,而是直接量化每个 CpG 位点的甲基化率(0~100%)。

实验类型

技术覆盖度成本适用
WGBS全基因组 ~28M CpG全景图、发现新 DMR
RRBS富集 CpG 岛附近 ~2M CpG启动子甲基化
450K / EPIC 芯片固定位点 450K~850K大样本量、TCGA 数据

BioF3 这一章聚焦 WGBS/RRBS 的 bisulfite-seq 分析。芯片数据用 minfi 包处理,思路不同。

分析流程

FASTQ → Bismark (bisulfite-aware alignment) → methylation extraction
→ per-CpG methylation table → DMR calling (methylKit / DSS / dmrseq)

Bismark 比对

# 建立 bisulfite 索引(一次性)
bismark_genome_preparation --bowtie2 reference/

# 比对
bismark --genome reference/ -1 sample_R1.fq.gz -2 sample_R2.fq.gz

# 去重
deduplicate_bismark sample_pe.bam

# 提取甲基化信息
bismark_methylation_extractor --paired-end --comprehensive --cytosine_report \
--genome_folder reference/ sample_pe.deduplicated.bam

输出的 CpG_context 文件每行一个 CpG 位点,包含染色体、位置、甲基化 reads 数、非甲基化 reads 数。

R 里做差异甲基化

library(methylKit)

# 读入 Bismark 的 CpG 报告
file_list <- list("sample1.CpG_report.txt", "sample2.CpG_report.txt",
"sample3.CpG_report.txt", "sample4.CpG_report.txt")
obj <- methRead(file_list,
sample.id = list("ctrl1","ctrl2","trt1","trt2"),
assembly = "hg38",
treatment = c(0, 0, 1, 1),
context = "CpG",
mincov = 10)

# 合并所有样本的 CpG 位点
meth <- unite(obj, destrand = FALSE)

# 差异甲基化位点
diff <- calculateDiffMeth(meth)
diff_25 <- getMethylDiff(diff, difference = 25, qvalue = 0.01)

# 差异甲基化区域(DMR)
# 用 tileMethylCounts 把基因组分成 1kb 窗口再做差异
tiles <- tileMethylCounts(obj, win.size = 1000, step.size = 1000)
meth_tiles <- unite(tiles)
diff_tiles <- calculateDiffMeth(meth_tiles)

关键概念

  • 甲基化率:某个 CpG 位点被甲基化的 reads 占总 reads 的比例
  • DMC(Differentially Methylated Cytosine):单个 CpG 位点的差异
  • DMR(Differentially Methylated Region):连续多个 CpG 位点一起变化的区域
  • 覆盖度过滤:覆盖度 < 10x 的位点噪声太大,通常过滤掉

和表达的关系

启动子区域的高甲基化通常和基因沉默相关;基因体内的甲基化和活跃转录正相关。把 DMR 和 RNA-seq 的差异基因做交叉,能找到"甲基化变化驱动表达变化"的候选基因。

但要注意:甲基化和表达的关系不是简单一对一。

区域甲基化 ↑一般预期
启动子(CpG island)表达 ↓经典抑制
启动子(非 CpG island)表达关系不明确不要硬解读
基因 body表达 ↑(活跃转录基因)反直觉
增强子表达 ↓类似启动子
重复元件沉默 retrotransposon调控功能

实务上:先把 DMR 注释到 promoter / gene body / enhancer / intergenic 各自分类,再分别和 RNA-seq 对比。整体混在一起看会得到无意义的"弱相关"。

常见坑

坑 1:没做 bisulfite 转化率 QC

WGBS 实验的 bisulfite 转化率应该 > 99%。未甲基化的 lambda phage spike-in 是金标准,转化率低意味着大量未甲基化 C 被当成 5mC,所有结果系统偏移。Bismark 输出会自动算这个值,看一眼。

坑 2:覆盖度不足直接做差异

WGBS 单 CpG 位点的可信差异需要每位点至少 10× 覆盖度。一份 30× WGBS 看上去深,但 CpG 只占基因组 1%,单位点覆盖度会被稀释。先 methRead(..., mincov = 10) 过滤。

坑 3:用 DMC 当 DMR 报告

单个 CpG(DMC)噪声大,真正可靠的是连续多个 CpG 一起变化的 DMR。methylKit tileMethylCounts 或 dmrseq 找区域,而不是把 DMC 直接报告。

坑 4:跨平台数据强行合并

WGBS / RRBS / 450K / EPIC 的位点集合不重合(450K 只覆盖 ~2% CpG)。跨平台 meta 分析需要先取交集 + 再 normalize,直接 cbind 是错的。

坑 5:differential = 25% 的阈值死搬

methylKit 默认 difference = 25 意为甲基化率差 ≥ 25%。对小效应(药物处理、衰老)来说 25% 太严,差不到 5% 但显著的位点经常有意义。从分布看实际差异范围再选阈值,不要照搬教程。

下一步

接着深入

横向延伸

参考资源

AI 组学实践

让 AI 带我实战这一篇

AI 会读这篇文章后给你 3-5 步学习计划, 逐步带你学完,最后出 1-3 道题验证你掌握得怎么样。 登录后 AI 才能记住你的进度。

静态文件

离线资料下载

手册 HTML / PDF 已在后台预生成,点击后直接下载网站静态资源。