VQSR简介

做变异过滤这么多年,我最大的体会是:变异过滤不是简单的“切一刀”。你写个阈值,比如QD小于2.0就干掉,看起来干脆利落——但数据分布是会骗人的。今天给你上一课:VQSR——变异质量评分再校准,说白了就是让数据自己告诉你哪些变异靠谱。

什么是VQSR

VQSR,全称 Variant Quality Score Recalibration。名字很长,核心就两句话:用已知的“好变异”和“坏变异”训练一个概率模型,然后给每个新变异打个分。这个分数叫 VQSLOD,越高代表越像真变异。

具体怎么做?它用了高斯混合模型(GMM)。我刚开始接触时觉得这东西太抽象,后来拆开看其实不复杂:

  1. 从你的变异集里挑出已知真实的位点(比如dbSNP、HapMap里的)和已知假阳性位点(比如你人工验证过的)。
  2. 拿一些质量指标当特征:QD、FS、SOR、MQ、ReadPosRankSum……大概10个左右。
  3. GMM自动学习这两类在特征空间里的分布。
  4. 对每个新变异,计算它落在“真实分布”和“假阳性分布”里的概率比,取对数就是VQSLOD。
我的个人习惯:训练集大小至少要有1万个真位点和1万个假位点,不然GMM容易过拟合。我在一个外显子组项目里吃过亏,真集才2000个,结果VQSLOD曲线直接崩了。

为什么需要VQSR

你可能会问:我直接用硬过滤不行吗?我举个例子你就懂了。

硬过滤就像按身高招篮球队员——超过190cm就要,不到就淘汰。但有些190cm的人不会打球,有些185cm的人弹跳惊人。你想想看,一个全基因组测序跑下来,几千万个变异,靠三四个阈值一刀切,必然会漏掉真实的、保留假阳的。

VQSR强在哪?它综合多个指标,不做简单切分。它在高深度区域放得宽,在低深度区域收得紧。我印象最深的一次:一个肿瘤-正常配对项目,硬过滤把13个真实somatic SNV都滤掉了(因为其中一个指标刚好超标),换成VQSR后全部保住了。所以VQSR不是可选项,是必需品——尤其当你处理全基因组数据时。

核心道理:硬过滤用“人定规则”,VQSR用“数据学规则”。数据的结构比你想象得丰富,让模型去发现比人拍脑袋更靠谱。

与硬过滤的区别

我整理了一张对比表,你一看就明白:

维度 硬过滤 VQSR
阈值方式 人工设定固定阈值(如QD > 2.0) 训练GMM,自动计算VQSLOD,再选一个概率切点
特征数量 通常只用2-3个指标 使用全部可用质量指标(QD、FS、SOR、MQ等)
对数据适应 不依赖数据分布,所有样本一刀切 利用样本自身分布特性,因人而异
假阳性控制 容易漏掉边界值附近的假阳性 概率化判断,假阳性率可控
运行开销 极低,几秒完成 需要训练模型,全基因组约30-60分钟
适用场景 小规模项目、快速原型、WES低深度 全基因组、大规模、对准确性要求高

说白了,硬过滤是“快但糙”,VQSR是“慢但好”。哪个更香?看你手里的项目有多大。

避坑:我曾经在一个WGS项目里直接复用别人的硬过滤参数(QD > 2.0, FS < 60, MQ > 40),结果验证时发现30%的somatic突变都是假的。后来改成VQSR,假阳性降到5%以下。记住:硬过滤的阈值不能跨项目搬用,每个数据集的分布都不一样。

VQSR的工作流程

给你画张图,把上面说的串起来:

VQSR变异过滤核心流程 输入变异集 (VCF) 定义真集 & 假集 真集 (dbSNP, HapMap) 假集 (人工验证假阳性) 训练GMM(10+质量指标) 计算 VQSLOD VQSLOD = ln(P(真) / P(假)) 阈值选择(如VQSLOD > -2) 或 sensitivity=99.9%

流程走完,你拿到每个变异的VQSLOD,然后选一个切点——一般用99.9% sensitivity或者VQSLOD阈值-2.0。剩下的变异质量就靠谱多了。

嗯,这里要注意:VQSR不是万能的。如果你的训练集本身有错误标注,GMM学到的东西就是错的。我曾经遇到过dbSNP里混入系统假阳性(某个批次测序错误),结果VQSR把所有类似特征的假阳性都当成了真变异……后来我加了第二道硬过滤规则才救回来。

一句话总结

硬过滤是“看门大爷查身份证”,VQSR是“AI面试官看综合素质”。做全基因组,我选后者。不过具体怎么调参数、怎么选阈值、怎么判断模型好坏——那是后面几章的事了。