跳转至

全基因组亚硫酸氢盐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