第1章:Mutect2简介与原理——体细胞突变检测的基本概念
大家好,欢迎来到这门课。今天咱们先聊聊底层的逻辑——体细胞突变检测到底在干什么?
做生信的人,尤其是搞肿瘤NGS分析的,几乎都绕不开GATK的Mutect2。我个人习惯先理解原理再上手调参,不然阈值改来改去,你都不知道自己在改什么。嗯,咱们就从最基本的概念说起。
1.1 什么是体细胞突变?它跟胚系突变有什么不一样?
人体细胞里的DNA,从受精卵开始一路复制分裂,总会积累一些错误。这里要区分两类突变:
- 胚系突变(Germline):从父母遗传得来,存在于身体每一个细胞里。如果检测到,那就是天生的,跟肿瘤没关系。
- 体细胞突变(Somatic):后天在特定组织(比如肿瘤)中获得的突变,只存在于肿瘤细胞里,正常组织里没有。
核心区分点:检测体细胞突变时,我们必须在同一患者的肿瘤样本和正常对照样本中同时做基因分型。只有肿瘤样本里检出、正常对照里检不出(或频率极低)的变异,才被判定为体细胞突变。
初学的时候,我总觉得这两者差不多,直到有一次处理一个胃癌样本——整个WES跑下来,软件报了上千个突变,结果一查是样本搞混了,所谓的“体细胞突变”其实是另一个人的胚系多态性。那之后我建分析流程时,第一步就是检查肿瘤-正常配对样本的基因型一致性。
说白了,体细胞突变检测就是做肿瘤 vs. 正常的差异分析。
1.2 Mutect2在这个场景里扮演什么角色?
Mutect2是GATK工具链里专门做体细胞突变检测的模块。它从GATK4开始被集成进来,取代了旧版的MuTect。我个人觉得它最大的优势是:它把体细胞突变的逻辑用概率模型做了封装,而不是靠简单的频率阈值一刀切。
下面是整个体细胞突变检测流程的概览图,我建议你先记下这个骨架,后面每个步骤我们都会拆开细讲。
小经验:很多新手只盯着最后的过滤VCF看,觉得突变数量少就是过滤严格了。其实不然——第一步的BQSR和去重如果没做好,Mutect2的原始概率计算就会跑偏。我推荐拿到原始VCF后,先用bcftools stats扫一遍TLOD分布,心里先有个底。
1.3 Mutect2到底是怎么判断一个位点是体细胞突变的?
Mutect2的数学基础是个贝叶斯模型。怎么理解呢?它会对每个候选位点计算两个概率:
- 存在体细胞突变的概率——基于肿瘤样本中的支持reads、正常对照中的支持reads、以及测序错误的背景噪声。
- 不存在突变的概率——即所有差异都能用测序错误或者正常对照的胚系多态性来解释。
然后它把这两个概率的比取对数,得到TLOD(Tumor LOD score)。TLOD越高,说明数据支持突变的证据越强。
贝叶斯模型核心公式(简化版):
TLOD = log10( P(测序数据 | 存在体细胞突变) / P(测序数据 | 没有体细胞突变) )
本质上,这个比值告诉我们:跟“没有突变”这个假设相比,“有突变”这个假设能多好地解释我们看到的测序数据。
我刚开始接触这个模型时,总觉得它就是个黑盒。后来有一次调试一个FFPE样本——大家都知道FFPE损伤高,全基因组都漂着C→T转换——结果Mutect2的TLOD在文库两端出现了系统性偏差。我不得不手动调高--min-allele-fraction来折中,那之后我才真正理解TLOD分布受文库质量影响有多大。
1.4 为什么要配对的“肿瘤-正常”设计?单肿瘤不行吗?
这个问题我在项目初期就被问过很多次,尤其是在样本稀缺的时候。“我只有肿瘤组织,能不能直接拿公共数据库里的正常样本当对照?”
不行,而且这样做的风险非常高。主要原因有两点:
| 风险来源 | 说明 | 后果 |
|---|---|---|
| 胚系多态性误判 | 患者本身携带的某个胚系SNP,在公共数据库里可能频率很低 | 被误判为体细胞突变→假阳性飙升 |
| 测序批次效应 | 不同批次测序的错误谱不同 | Mutect2的污染校正模型失效 |
| 缺乏基线 | 无法区分低频体突变vs. 测序噪声 | 低AF突变几乎全部丢失或全是假阳性 |
你想想看,如果正常对照不是来自同一个人的正常组织,Mutect2的正常对照对数似然比(NLOD)根本派不上用场。NLOD的作用正是量化在正常对照中检出该突变的证据有多强——如果NLOD高,说明这个突变在正常里也可能存在,Model就会给它打上germline_risk标签。
避坑提醒:我曾经在一个多中心回顾性项目中,因为一个中心的正常对照是用水样口咽拭子提取的,跟肿瘤组织来源不一致,导致Mutect2在--normal-sample参数下直接报“样本不匹配”退出——后来检查发现正常的BAM覆盖度<1x的位点占了40%。所以,配对的正常对照样本质量,必须跟肿瘤同等级要求。
1.5 除了配对设计,Mutect2还依赖什么?
从原理上来说,还有几个关键组件:
- Panel of Normals(PoN):一组来自多个正常个体(建库批次一致)的测序数据,用于估计系统性的测序误差和比对偏好。Mutect2在PoN中高频出现的位点会被自动丢弃——这个是我最推荐的常规操作。
- 污染校正模型:如果肿瘤样本里混入了正常细胞(或者正常样本里有肿瘤细胞),AF会偏移。Mutect2内部嵌了个ContEst样式的污染估计。
- 活性区域(Active Region):基于局部de novo组装,而不是简单的pileup齐位,这样indel周围的比对噪声能被消化。
嗯,说到PoN,有一件事我很早就想提醒大家:PoN不是越大越好。我用过一份400例的PoN,结果发现里面包含了大量低质量样本的germline noise,反而导致某些位点的体细胞突变被错误抑制。后来我调整到150例高深度覆盖的正样本,效果更稳定。这也是我在项目里反复验证过的:质量 > 数量。
1.6 本章小结:记住这几个概念再往下走
核心知识点速览:
- 体细胞突变=肿瘤里有,正常里没有(或非常弱)。
- Mutect2用贝叶斯模型,输出TLOD和NLOD作为置信度指标。
- 肿瘤-正常配对是必要条件,不能拿公共数据替代。
- PoN用于过滤系统噪声,但需要精选样本构建。
- 过滤步骤(FilterMutectCalls)才是我们调优的主战场——后面29章都在讲这个。
这一章我们先搭好概念框架。后面的章节我会手把手带你拆解FilterMutectCalls的每一个参数:从--min-tlod到--max-events-in-region,从如何构建并维护PoN到最后用真集验证召回率。这些阈值怎么设、设多少,都有我踩过的坑和总结出的经验在里面。
记住这个流程图的骨架,接下来就踏踏实实跟我走完每一步吧。