四、肿瘤样本纯度:那个你不得不正视的“隐藏变量”
做 Mutect2 过滤,有个参数很容易被忽略,却是整个过滤链条的“隐形指挥棒”——肿瘤纯度。说白了,就是肿瘤样本里真正肿瘤细胞占了多大比例。这不是你随便填个 0.8 就能万事大吉的数字。纯度不对,过滤阈值怎么调都是白搭。
4.1 纯度为什么能“绑架”你的过滤阈值?
先想一个问题:你测序出来的肿瘤样本,里面有多少变异信号是真实的肿瘤突变?
纯度低了,正常细胞的等位基因把肿瘤的信号“稀释”了,VAF(等位基因频率)整体往下走。这时候,如果你还按默认的 0.05 去过滤,一半以上的真实突变可能就被你干掉了。
我刚开始做这个时,就吃过这个亏。一个纯度只有 30% 的样本,跑完 Mutect2 一看,过滤掉了一大堆“疑似假阳性”。后来复盘才发现——根本不是假阳性,是纯度太低,真实突变被埋在了正常信号的噪音里。
4.2 纯度与噪声的“量化关系”
Mutect2 的过滤模块,核心判断依据其实是 log(odds)——也就是某个位点是真实突变的概率有多大。纯度直接影响这个概率的计算。
咱们来看一下数学关系:
log(odds) = log( P(真实突变) / P(测序错误) )
P(真实突变) ≈ 肿瘤深度 × 纯度 × VAF
P(测序错误) ≈ 正常深度 × (1 - 纯度) × 测序错误率
纯度越高,真实突变的“权重”越大,log(odds) 自然就高,过滤可以严一些。反之,纯度低了,同等 VAF 下的 log(odds) 被拉低,你不得不在 --max-events-in-region、--max-alt-allele-count 这些参数上放水。
4.3 不同纯度下的过滤策略:我的经验模板
嗯,这里直接给一个我项目里总结出来的纯度-阈值对照表。不是死规则,但至少是个好起点:
| 肿瘤纯度范围 | 建议 LOD 阈值 | 建议 min-allele-fraction | 备注 |
|---|---|---|---|
| > 80% | 6.3 或更高 | 0.05 | 高纯度,可用默认值拉高特异性 |
| 60% - 80% | 5.0 - 6.0 | 0.04 | 适度下调,增加灵敏度 |
| 40% - 60% | 4.0 - 5.0 | 0.03 | 典型中等纯度,需要平衡 |
| 20% - 40% | 3.0 - 4.0 | 0.02 | 低纯度,以灵敏度为重 |
| < 20% | 2.0 - 3.0 | 0.01 | 极限低纯度,接受大量假阳性 |
这张表,说白了就是一条“纯度越低,阈值越宽”的曲线。你想想看,纯度 10% 的样本,想检出 0.01 的 VAF 突变,你非要用 0.05 去拦,那不是自废武功吗?
4.4 实际工作中,我怎么估计纯度
不是每次都有病理报告告诉你纯度是多少。很多时候你得自己算。这里的路子我一般分两步:
- 用外部工具估算: 比如
PURPLE、Sequenza,或者直接用ASCAT。这些工具会基于拷贝数变异给你一个纯度估值。我个人习惯把 PURPLE 的结果作为第一手参考,因为它在 WGS 上表现得比较稳健。 - 凭经验验证: 跑一轮 Mutect2,看看 VAF 直方图的“主峰”在哪。如果是低纯度样本,主峰通常在 0.05 - 0.15 之间,而不是 0.25 - 0.5。这时候,你心里就有数了——纯度不会高。
4.5 纯度估计不准的后果
我之前遇到过这么个事:一个 50% 纯度的样本,病理报告上写的却是“肿瘤含量较高”。我按 70% 去调阈值,结果 LOD 设到 5.5,最后只拿到几十个体细胞突变。别人用同一组数据跑出来的结果却是三百多个。
这就是典型的高估纯度,导致过滤过于激进,把真阳性全拦了。
反过来,低估纯度也很要命。你会得到一个超级冗余的突变列表,去 STRELKA、Manta 那一步验证的时候,假阳性能占到 80% 以上,基本没法用。
4.6 纯度与过滤的整体关系图
下面这张图能帮你直观理解:纯度如何像“螺丝刀”一样,拧紧了整个过滤链路上的每个环节:
你看,纯度在最上游,一但估计偏了,下游的过滤参数全部跟着跑偏。所以我在每一轮正式过滤前,都会先花十分钟确认一下纯度估计,绝不跳过。
4.7 一个实操案例:纯度从 0.8 调到 0.3 后,LOD 怎么变?
假设你有一个深度 100x 的肿瘤样本,初始估计纯度 80%。你设了 LOD 6.3,跑出来 200 个候选突变。结果后来发现纯度只有 30%——这时候你还信这 200 个突变吗?
很可能不该信。因为当初你设的 LOD 6.3,是基于“80% 的纯度为真实突变提供高概率”的假设。实际纯度只有 30%,很多 VAF 只有 0.05-0.1 的真实突变,log(odds) 根本过不了 6.3 的卡。
我的做法是这样的——重新算一遍:
- 把 VAF 在 0.05-0.1 区间的位点全部找出来
- 手动看一下它们的 reads 支持度,特别是配对正常样本的质量
- 如果支持度还行,说明不是测序噪音,而是被纯度“沉下去”的真实突变
- 这时候,我会把 LOD 降到 3.0-4.0,再跑一轮
别怕这样做会引入假阳性。低纯度样本的本质就是“假阳性与弱信号并存”。你唯一的出路是:先放宽,后验证。放宽是为了把真信号打捞上来,验证阶段再用 PCR 或另外的 orthogonal 方法去确认——那个阶段可以严。