全基因组亚硫酸氢盐bisulfite测序——区分5mC与5hmC¶
一句话概述¶
利用oxBS-seq和TAB-seq技术在全基因组水平区分5-甲基胞嘧啶(5mC)和5-羟甲基胞嘧啶(5hmC),解析两种表观遗传修饰的精确分布及其对基因调控的差异功能。
核心知识点总览¶
| 知识点 | 关键内容 | 重要程度 |
|---|---|---|
| 5mC vs 5hmC生物学 | TET氧化通路/功能差异 | ⭐⭐⭐⭐⭐ |
| 标准BS-seq的局限 | 无法区分5mC和5hmC | ⭐⭐⭐⭐⭐ |
| oxBS-seq原理 | 氧化+亚硫酸盐→只测5mC | ⭐⭐⭐⭐⭐ |
| TAB-seq原理 | TET+亚硫酸盐→只测5hmC | ⭐⭐⭐⭐ |
| 差减法计算 | BS-seq减oxBS-seq=5hmC | ⭐⭐⭐⭐ |
| 数据分析流程 | Bismark→methylKit/DSS差异分析 | ⭐⭐⭐⭐ |
| 5hmC功能意义 | 增强子/基因体/去甲基化中间态 | ⭐⭐⭐ |
| 质控与覆盖度 | lambda spike-in/转换效率评估 | ⭐⭐⭐ |
各步骤详解¶
第一步:5mC与5hmC的生物学基础¶
白话解释: DNA甲基化(5mC)是最经典的表观遗传修饰。但科学家后来发现,TET酶可以将5mC氧化为5hmC(5-羟甲基胞嘧啶),再进一步氧化为5fC和5caC,最终通过碱基切除修复(BER)恢复为未修饰的C。因此5hmC不仅是去甲基化的中间产物,本身也是独立的表观遗传标记,具有独特的功能——在大脑中特别丰富,标记活性增强子和基因体。
技术细节: 标准BS-seq的问题:亚硫酸氢盐将未修饰C转为U(读作T),而5mC和5hmC都不被转化(都读作C)。因此标准BS-seq测到的"甲基化"实际是5mC+5hmC的混合信号。
区分方法: - oxBS-seq:先用KRuO4将5hmC氧化为5fC,5fC被BS转为U。结果:只有5mC保护→只测5mC - TAB-seq:先用βGT将5hmC糖基化保护,再用TET将5mC氧化为5caC,5caC被BS转为U。结果:只有5hmC保护→只测5hmC - 差减法:5hmC = BS-seq信号 - oxBS-seq信号
# 5mC/5hmC区分策略总结
# | 方法 | 读作C的修饰 | 读作T的修饰 |
# |------|-------------|-------------|
# | BS-seq | 5mC + 5hmC | C, 5fC, 5caC |
# | oxBS-seq | 5mC only | C, 5hmC(→5fC), 5fC, 5caC |
# | TAB-seq | 5hmC only | C, 5mC(→5caC), 5fC, 5caC |
第二步:实验设计与数据质控¶
白话解释: oxBS-seq/TAB-seq实验需要从同一DNA样本分两份:一份做标准BS-seq,一份做oxBS-seq(或TAB-seq)。两者的差值就是5hmC。为了评估转化效率,需要加入已知甲基化状态的对照DNA(如lambda噬菌体DNA和甲基化spike-in)。
技术细节:
# === 数据质控 ===
# 1. FastQC质检
fastqc -t 8 -o qc_raw/ BS_R1.fq.gz BS_R2.fq.gz oxBS_R1.fq.gz oxBS_R2.fq.gz
# 2. Trim Galore 去接头(bisulfite模式)
trim_galore --paired --clip_R1 10 --clip_R2 10 \
--three_prime_clip_R1 10 --three_prime_clip_R2 10 \
--cores 8 --fastqc \
BS_R1.fq.gz BS_R2.fq.gz
trim_galore --paired --clip_R1 10 --clip_R2 10 \
--three_prime_clip_R1 10 --three_prime_clip_R2 10 \
--cores 8 --fastqc \
oxBS_R1.fq.gz oxBS_R2.fq.gz
# 3. Bismark比对
bismark --genome genome_folder/ \
--bowtie2 --parallel 4 \
-1 BS_R1_val_1.fq.gz -2 BS_R2_val_2.fq.gz \
-o bismark_BS/
bismark --genome genome_folder/ \
--bowtie2 --parallel 4 \
-1 oxBS_R1_val_1.fq.gz -2 oxBS_R2_val_2.fq.gz \
-o bismark_oxBS/
# 4. 去重
deduplicate_bismark --bam bismark_BS/BS_pe.bam
deduplicate_bismark --bam bismark_oxBS/oxBS_pe.bam
# 5. 提取甲基化信息
bismark_methylation_extractor --paired-end --comprehensive \
--CX --bedGraph --cytosine_report \
--genome_folder genome_folder/ \
bismark_BS/BS_pe.deduplicated.bam
bismark_methylation_extractor --paired-end --comprehensive \
--CX --bedGraph --cytosine_report \
--genome_folder genome_folder/ \
bismark_oxBS/oxBS_pe.deduplicated.bam
# 6. 转换效率评估(lambda DNA spike-in)
# lambda DNA完全未甲基化,BS-seq后应>99%读作T
# 如果lambda C→T转换率 < 99%,说明BS转化不完全
grep "lambda" BS_CpG_report.txt | \
awk '{m+=$4; u+=$5} END{print "BS conversion rate:", u/(m+u)*100, "%"}'
第三步:5hmC计算——差减法¶
白话解释: BS-seq测到的甲基化 = 5mC + 5hmC;oxBS-seq测到的 = 只有5mC。因此5hmC = BS信号 - oxBS信号。但由于测序随机误差,差值可能为负,需要统计方法处理。
技术细节:
# === 5hmC计算 ===
library(methylKit)
# 读取BS-seq和oxBS-seq的CpG甲基化数据
bs_data <- methRead("BS_CpG_report.txt",
sample.id = "BS", assembly = "hg38",
treatment = 0, context = "CpG",
mincov = 10) # 最小覆盖度10x
oxbs_data <- methRead("oxBS_CpG_report.txt",
sample.id = "oxBS", assembly = "hg38",
treatment = 0, context = "CpG",
mincov = 10)
# 提取共同位点
bs_df <- getData(bs_data)
oxbs_df <- getData(oxbs_data)
# 合并
merged <- merge(bs_df, oxbs_df, by = c("chr", "start", "end"),
suffixes = c("_BS", "_oxBS"))
# 计算5hmC水平
# 5hmC% = BS_methylation% - oxBS_methylation%
merged$methyl_BS <- merged$numCs_BS / merged$coverage_BS
merged$methyl_oxBS <- merged$numCs_oxBS / merged$coverage_oxBS
merged$hydroxymethyl <- merged$methyl_BS - merged$methyl_oxBS
# 处理负值(统计噪声)
merged$hydroxymethyl[merged$hydroxymethyl < 0] <- 0
# 统计学方法:MLML(最大似然估计)
# 更精确地估计5mC和5hmC水平
library(MLML2R)
# MLML方法联合估计(注意参数名对应关系)
# BS-seq: T.matrix=未转化C(=5mC+5hmC), U.matrix=转化后T(=未甲基化C)
# oxBS-seq: M.matrix=未转化C(=5mC only), L.matrix=转化后T(=C+5hmC被氧化)
mlml_results <- MLML(T.matrix = merged$numCs_BS, # BS中的C(未转化=5mC+5hmC)
U.matrix = merged$numTs_BS, # BS中的T(转化=未甲基化)
M.matrix = merged$numCs_oxBS, # oxBS中的C(=5mC only)
L.matrix = merged$numTs_oxBS) # oxBS中的T(转化=C+5hmC→5fC)
merged$mC_MLML <- mlml_results$mC # 5mC
merged$hmC_MLML <- mlml_results$hmC # 5hmC
merged$C_MLML <- mlml_results$C # 未修饰C
第四步:5hmC的基因组分布分析¶
白话解释: 5hmC在基因组中的分布与5mC不同。5hmC在活性增强子、基因体(特别是高表达基因)、以及TET酶活跃区域富集。通过分析5hmC在不同基因组注释区域的分布,可以理解其调控功能。
技术细节:
# === 5hmC基因组分布 ===
library(GenomicRanges)
library(annotatr)
# 定义5hmC位点(hydroxymethyl > 5%的位点)
hmC_sites <- GRanges(
seqnames = merged$chr,
ranges = IRanges(merged$start, merged$end)
)
hmC_sites$hmC_level <- merged$hmC_MLML
# 高5hmC位点
high_hmC <- hmC_sites[hmC_sites$hmC_level > 0.05]
# 注释基因组区域
annots <- build_annotations(genome = "hg38",
annotations = c("hg38_cpgs", "hg38_basicgenes",
"hg38_genes_intergenic"))
annotated <- annotate_regions(regions = high_hmC, annotations = annots)
# 统计各区域的5hmC分布
region_summary <- summarize_annotations(annotated)
print(region_summary)
# 与已知增强子区域重叠
enhancers <- import("H3K27ac_enhancers.bed")
overlap_enhancer <- countOverlaps(high_hmC, enhancers) > 0
cat(sprintf("5hmC sites at enhancers: %.1f%%\n",
sum(overlap_enhancer) / length(high_hmC) * 100))
# 5hmC与基因表达的关联
# 计算每个基因body的平均5hmC水平
gene_body_hmC <- aggregate(hmC_level ~ gene, data = annotated_df, FUN = mean)
# 与RNA-seq FPKM合并
merged_expr <- merge(gene_body_hmC, gene_expression, by = "gene")
cor.test(merged_expr$hmC_level, log2(merged_expr$FPKM + 1))
# 期望正相关:基因体5hmC与表达正相关
第五步:差异5hmC分析¶
白话解释: 比较不同条件(如正常vs肿瘤、分化前后)的5hmC差异,找出哪些区域的5hmC发生了变化。5hmC的丢失在肿瘤中普遍存在,可能与TET酶功能异常有关。
技术细节:
# === 差异5hmC分析 ===
library(DSS)
# 使用DSS进行差异甲基化/羟甲基化检测
# DSS支持对5hmC的差异分析
# 准备BSseq对象
bs_normal <- BSseq(chr = normal_data$chr,
pos = normal_data$start,
M = as.matrix(normal_data$numCs),
Cov = as.matrix(normal_data$coverage),
sampleNames = "Normal")
bs_tumor <- BSseq(chr = tumor_data$chr,
pos = tumor_data$start,
M = as.matrix(tumor_data$numCs),
Cov = as.matrix(tumor_data$coverage),
sampleNames = "Tumor")
# 差异5hmC区域(DMR)检测
dml_test <- DMLtest(BSobj = bs_combined, group1 = "Normal", group2 = "Tumor")
dmrs <- callDMR(dml_test, delta = 0.1, p.threshold = 0.001)
# 5hmC loss区域(在肿瘤中常见)
hmC_loss <- dmrs[dmrs$diff.Methy < -0.1, ] # 肿瘤5hmC降低
cat(sprintf("Regions with 5hmC loss: %d\n", nrow(hmC_loss)))
第六步:与其他组学数据整合¶
白话解释: 将5hmC数据与ChIP-seq(组蛋白修饰)、ATAC-seq(染色质开放性)和RNA-seq(基因表达)整合,可以全面理解5hmC在基因调控中的角色。
技术细节:
# === 多组学整合 ===
# 5hmC与组蛋白修饰的共定位
# 5hmC与H3K4me1(增强子标记)高度共定位
# 5hmC与H3K27me3(抑制标记)互斥
# 在增强子区域比较5mC vs 5hmC
enhancer_5mC <- mean(merged$mC_MLML[overlap_enhancer])
enhancer_5hmC <- mean(merged$hmC_MLML[overlap_enhancer])
promoter_5mC <- mean(merged$mC_MLML[overlap_promoter])
promoter_5hmC <- mean(merged$hmC_MLML[overlap_promoter])
cat(sprintf("Enhancer: 5mC=%.3f, 5hmC=%.3f\n", enhancer_5mC, enhancer_5hmC))
cat(sprintf("Promoter: 5mC=%.3f, 5hmC=%.3f\n", promoter_5mC, promoter_5hmC))
# 期望:增强子5hmC高于启动子,启动子5mC高于增强子
实战命令速查¶
# oxBS-seq分析流程
trim_galore --paired R1.fq.gz R2.fq.gz
bismark --genome ref/ -1 R1_val.fq.gz -2 R2_val.fq.gz
deduplicate_bismark --bam aligned.bam
bismark_methylation_extractor --cytosine_report --genome_folder ref/ dedup.bam
# R中计算5hmC
# 5hmC = BS_methylation - oxBS_methylation (MLML2R最大似然估计)
面试常问点¶
Q1: 标准BS-seq为什么无法区分5mC和5hmC?¶
A: 亚硫酸氢盐(bisulfite)将未修饰C脱氨基为U(测序读作T),但5mC和5hmC都能抵抗这种脱氨基反应(都读作C)。因此BS-seq报告的"甲基化率"实际是5mC+5hmC的总和。在大脑等5hmC含量高的组织中(5hmC可占总修饰的30-40%),这种混淆会导致严重误判。
Q2: oxBS-seq和TAB-seq分别适用于什么情况?¶
A: oxBS-seq通过氧化5hmC使其被BS转化,结果只保留5mC信号。5hmC=BS-oxBS(差减法)。TAB-seq保护5hmC、氧化5mC,直接测5hmC。oxBS-seq适合5mC和5hmC都想要的研究(一个实验得两个)。TAB-seq直接给5hmC图谱,信噪比更好(不依赖差减),适合5hmC含量低的样本。
Q3: 5hmC在哪些组织/细胞中特别丰富?¶
A: 5hmC在大脑中最丰富(占总C的0.3-0.7%,是5mC的1/4到1/3)。胚胎干细胞也有较高水平。成体组织中脑>肝>肾>心>脾>肺。TET酶(TET1/2/3)负责5mC→5hmC转化,在神经元中高表达。肿瘤中5hmC普遍大幅降低(与TET突变/IDH突变有关)。
Q4: 差减法计算5hmC的统计学问题?¶
A: 主要问题:(1) 差值可能为负(随机误差)——需截断为0或用MLE/贝叶斯方法;(2) 两次测序的误差叠加——方差增大;(3) 低覆盖位点的差值不可靠——需设最小覆盖度阈值。推荐使用MLML2R包的最大似然估计同时估计5mC和5hmC,比简单差减更准确。
Q5: 5hmC的功能意义与5mC有何不同?¶
A: 5mC通常与基因沉默相关(启动子高甲基化=转录抑制),而5hmC功能不同:(1) 标记活性增强子(与H3K4me1共定位);(2) 基因体5hmC与转录活性正相关;(3) 可能代表去甲基化过程的中间态;(4) 在神经元分化/学习记忆中有独特功能。5hmC通常被认为是"活性"标记而非"沉默"标记。
易错点¶
1. 将标准BS-seq结果直接解读为"甲基化"¶
在5hmC丰富的组织(特别是大脑),BS-seq报告的甲基化包含了相当比例的5hmC。不做区分可能导致功能解释错误。
2. 覆盖度不足导致5hmC估计不准¶
差减法对两个数据集的覆盖度都有要求。每个CpG位点在BS和oxBS中都需≥10x覆盖,否则差值方差太大。WGBS通常需要30x+。
3. bisulfite转化不完全¶
BS转化效率<99%会产生假阳性5mC/5hmC信号。必须用lambda spike-in验证转化效率≥99%。
4. 忽略氧化反应效率¶
oxBS-seq中KRuO4氧化5hmC→5fC的效率不是100%。氧化不完全会导致oxBS数据中残留部分5hmC信号,使计算的5hmC被低估。需要用含已知5hmC的对照验证氧化效率。
5. 混淆CpG和非CpG context的5hmC¶
5hmC在非CpG context(CHG/CHH)中也存在(特别在大脑),但水平很低。分析时应分别报告CpG和非CpG的5hmC。
补充知识¶
与104_Bisulfite测序数据分析.md的关系¶
- 104文档讲标准BS-seq(WGBS/RRBS)流程,无法区分5mC和5hmC
- 本文档是104的进阶篇,专门讲如何区分5mC与5hmC
- 两篇共享Bismark比对和methylation_extractor步骤,参数一致
新兴5hmC检测方法¶
- ACE-seq:APOBEC介导的5hmC检测(无需bisulfite)
- hmC-CATCH:化学辅助转化检测5hmC
- nano-hmC-seq:Nanopore直接检测5hmC
- TAPS:TET-Assisted Pyridine borane Sequencing(非bisulfite方法)
5hmC在疾病中的意义¶
- 肿瘤:全局5hmC丢失(TET突变/IDH突变)
- 神经退行性疾病:特定区域5hmC变化
- 发育异常:TET敲除导致分化缺陷
引用推荐¶
- oxBS-seq: Booth et al., Science, 2012
- TAB-seq: Yu et al., Cell, 2012
- MLML2R: Kiihl et al., Statistical Applications in Genetics and Molecular Biology, 2019
- 5hmC review: Wu & Zhang, Nature Reviews Genetics, 2017