生信从湿到干 · 交互式动画教程
⭑ 试用 OmicOne
第 5 章从 reads 到数据

体细胞突变检测

有了肿瘤和正常两份 BAM,体细胞突变检测要回答的是:在每个位点上,肿瘤里多出来的那个碱基,是肿瘤获得的突变、遗传来的胚系变异,还是实验和测序留下的假象?GATK 的 Mutect2 先找出候选,再用一系列过滤把假象剔掉。

在一个位点上数 reads

把覆盖同一位点的 reads 竖着叠起来,就是 pileup。数出其中带变异碱基的支持 reads,除以总 reads 数,就得到 VAF。肿瘤和正常并排看,三种情况一目了然:

  • 两边都约 50%(或都约 100%):胚系变异。
  • 肿瘤中有、正常中几乎没有:体细胞突变候选。
  • 只有寥寥几条 reads 支持,而且都朝同一个方向、都挤在 read 末端,或者都是低质量碱基:多半是假象。

Mutect2 以肿瘤–正常配对模式运行。它先找出可能有变异的活跃区域,在区域内对 reads 做局部组装,得到候选单倍型,再分别评估这个变异在肿瘤中存在的证据,以及它在正常样本中是否也存在。两份辅助资源帮它排除胚系变异和常见假象:

  • 正常样本集(PoN):用同一试剂盒、同一流程处理的一批正常样本,在其中反复出现的位点多半是技术假象。
  • 胚系人群频率库(如 gnomAD):人群中常见的变异更可能是胚系。正常样本测得浅时,这个先验尤其重要。

预期 VAF 与过滤:哪些是假象

肿瘤与正常的 pileup示意
正在加载数据…

在示意组件里调整纯度、深度和突变状态。正常样本里始终没有 alt reads;克隆性杂合突变在肿瘤中的期望 VAF 约为纯度 / 2,只存在于一半肿瘤细胞的亚克隆突变再减半。所以 VAF 15% 既可能是纯度 30% 的克隆性突变,也可能是纯度 60% 时的亚克隆突变,单看 VAF 分不出来。深度越浅,本次抽样看到的 VAF 离期望值越远。“两个拷贝(LOH)”这一项展示了杂合性丢失:带突变的那一份被保留下来,VAF 升到约等于纯度。更一般的拷贝数改变会让体细胞突变高于或低于纯度 / 2,也会让胚系杂合位点在肿瘤中偏离 50%。

Mutect2 之后,最佳实践还有三步:

  1. LearnReadOrientationModel:利用 Mutect2 运行时收集的 F1R2/F2R1 计数,学习读段方向偏好,识别 FFPE 脱氨(C>T)和 8-oxoG 氧化(G>T)造成的假象。
  2. CalculateContamination:以 GetPileupSummaries 在常见胚系 SNP 上的统计为输入,估计样本中混入他人 DNA 的比例,即交叉污染。
  3. FilterMutectCalls:综合前两步的结果,再检查链偏好、支持 reads 是否太少、比对质量、变异是否总在 read 末端、是否与 PoN 或正常样本重合等,给每个候选标上 PASS 或具体的过滤原因。

常见误区

  • 把 VCF 里每一行都当作突变。 只有 FILTER 为 PASS 的才通过了过滤,没通过的行仍然留在文件里。
  • 借用别的平台的 PoN。 PoN 记录的是特定试剂盒和流程的系统假象,换了试剂盒就失去大部分作用。
  • 把人群频率当成 VAF。 gnomAD 的频率描述人群,VAF 描述一个样本里的 reads,两者含义完全不同。
  • 低 VAF 一律删除。 硬性的 VAF 下限会删掉低纯度样本和亚克隆里的真实突变,应先看方向偏好、支持 reads 和样本纯度。