变异检测概述:应用场景与基本概念

大家好,我是老张。做生信这行有些年头了,变异检测这块坑踩了不少,也攒了些经验。这一章咱们先聊聊基础——不是什么枯燥的定义堆砌,而是把变异检测到底在干嘛、用在哪儿、核心逻辑是什么,掰开揉碎了讲清楚。

你想想看,做人类基因组也好,肿瘤测序也好,或者搞动植物育种,最终目的都是找出样本跟参考基因组不一样的地方。这个“不一样”,就是变异。怎么从海量测序数据里把这些位点揪出来?这就是变异检测要干的事。

1.1 变异检测在干什么

说白了,就是拿着测序仪产出的短读长(reads),跟参考基因组比对,然后看哪些位置对不上。对不上的地方,可能是单个碱基换了、多了、少了,也可能是大段结构变了。

我个人习惯把变异检测比作“找茬游戏”:参考基因组是标准答案,你的样本是答题卡,测序数据就是答题卡上的铅笔痕迹。我们要从那些模糊、重叠、有噪声的痕迹里,识别出真正写错的地方。

核心思路:比对 → 检测 → 过滤 → 注释。这个流程在所有主流工具里都大同小异,区别在于每一步的算法和参数。

1.2 应用场景——你在什么项目里会遇到它

不同场景对变异检测的要求差得挺远。我列几个我实际接触过的典型场景:

场景典型项目检测重点参数要求
人类遗传病WGS/WES 家系分析SNP、Indel(尤其是罕见变异)高灵敏度,低假阳性
肿瘤体细胞突变肿瘤-正常配对测序SNV、小 Indel、CNV、SV低等位基因频率检出,降噪
动植物育种GWAS、群体遗传SNP 密度,群体多态性批量处理,硬过滤标准
微生物/病毒病原体溯源、耐药突变高深度位点,低频变异低深度阈值,高深度矫正
三代测序PacBio/ONT 结构变异大段缺失、插入、倒位比对容忍度,链特异性处理

我在一个肿瘤项目里遇到过这样的情况:用默认参数跑GATK HaplotypeCaller,结果把测序深度低的区域全判成杂合缺失。后来发现是参数里的最小碱基质量阈值设得太低,导致很多假阳。你看,参数不对,后面的注释全白费。

1.3 变异检测的核心概念

为了后面聊参数时不懵,先快速过几个你必须搞清楚的名词:

  • 参考基因组(Reference):比对的目标序列。hg38、GRCh37、T2T-CHM13 你是要选的。不同版本影响比对结果。
  • 比对(Alignment):把 reads 贴到参考上。常用的 BWA-MEM、minimap2。比对质量直接决定检测质量。
  • 碱基质量(Base Quality):每个碱基的测序置信度。Phred 分数,Q30 = 1/1000 错误率。检测时会根据质量加权投票。
  • 测序深度(Depth):覆盖到某个位点的 reads 数量。深度不够,低频变异根本看不到,或者假阳性爆炸。
  • 等位基因频率(AF):支持变异 reads 占该位点所有 reads 的比例。体细胞突变一般要求 AF ≥ 0.05~0.1,生殖系突变期望 0.5(杂合)或 1.0(纯合)。
  • 重比对(Realignment):在 Indel 附近重新调整 reads 位置,减少错配。老工具依赖这一步,新模型(如 GATK4 的 HaplotypeCaller)内嵌了局部组装。
  • 硬过滤 vs 软过滤:硬过滤是直接丢掉不达标的位点,软过滤是标记出来留给下游自己定。实操里我倾向先软过滤,做诊断项目时再硬过滤。
避坑指南:我早期一个项目里用了默认 Q20 的碱基质量阈值,但测序数据是 NovaSeq 的,Q20 以上比例极高,导致大部分假阳性没滤掉。后来改成 Q30,效果立刻改善。那个项目让我养成了“先看数据质量分布再定参数”的习惯。

1.4 主流工具与调用方式

现在业内常见的变异检测工具有这些:

  • GATK(HaplotypeCaller, Mutect2):人类 WGS/WES 金标准,以局部 haplotype 组装为核心。
  • freebayes:基于贝叶斯的非流程检测,适合群体和细菌,速度快。
  • bcftools + samtools mpileup:老牌组合,适合快速预览和批量过滤。
  • DeepVariant:Google 的深度学习方法,使用 CNN 模型,精度高但吃 GPU。
  • Strelka2:Illumina 出品,兼顾速度和准确度,支持体细胞和生殖系。

调用方式基本都遵循:先比对,再排序标记重复,然后跑检测。拿 GATK 举个例子:

# 比对
bwa mem -t 8 -R '@RG\tID:my_sample\tSM:my_sample\tPL:ILLUMINA' \
  reference.fa sample_R1.fastq.gz sample_R2.fastq.gz | \
  samtools sort -o sample_sorted.bam

# 标记重复(预处理必做)
gatk MarkDuplicates -I sample_sorted.bam -O sample_dedup.bam -M metrics.txt

# 调用 Germline SNP/Indel
gatk HaplotypeCaller \
  -R reference.fa \
  -I sample_dedup.bam \
  -O sample_raw_variants.vcf

嗯,这里要注意:@RG标签不写的话,后面很多分析脚本直接报错,或者分组出错。我见过有人跑完了100个样本才发现所有样本的RG都一样,结果没法合并GVCF——那一周白干了。所以养成习惯,每一步都检查文件头和元数据。

1.5 变异检测的整体流程框架

下面这张图是整个章节的知识骨架,也是后续参数调优的思维地图。我把它画出来,你保存好,后面每一章都会围绕这些节点展开。

变异检测总体流程框架 原始 FASTQ / BAM 数据 预处理(比对、去重、BQSR) 变异检测(单样本 / 群体) 原始 VCF 过滤 / 标记(硬、软) 注释 / 优先级排序 最终 VCF / 报告 关键参数贯穿流程: • 碱基质量阈值(--min-base-quality) • 最小映射质量(--min-mapping-quality) • 覆盖深度上下限(--max-coverage, --min-depth) • 等位基因频率阈值(--min-af) 常见输出格式: • VCF(Variant Call Format)— 位点列表 + 基因型 • GVCF — 包含全基因组所有位点的记录 • BCF — 二进制 VCF,节省空间 • TSV / CSV — 下游分析常用格式

1.6 参数调优的第一原则

你可能会问:“老张,这么多参数,到底哪些最重要?” 我个人经验,第一步永远是看数据质量。打开 FastQC 报告,看碱基质量分布、GC含量、接头污染、重复率。如果这里有硬伤,后面怎么调参数都没用。

警告:永远不要在没看过质量报告的情况下直接跑变异检测。我在一个外显子项目里,测序中心把接头没去除干净的样本发过来,我直接跑 HaplotypeCaller,结果假阳性率超过 40%。后来发现是 adapter 污染导致的错误比对。浪费了整整一周的计算资源。

另一个经验是:记住你的参考基因组版本。我见过有人用 hg38 比对,却用 GRCh37 的 dbSNP 做过滤,结果大量已知位点被错误标记。检查参考版本、dbSNP 版本、注释数据库版本是否一致,是必须做的作业。

好了,这一章把大背景讲清楚了。后面每一章我们会深入到一个具体参数:从碱基质量阈值、映射质量、深度过滤、AF 阈值、到 Indel 区域重比对、硬过滤条件、联合基因型……每一个参数我都会告诉你怎么设、为什么这么设、以及我在项目中踩过的坑。