1. GVCF原理概述
大家好,欢迎来到《群体联合基因分型GVCF实战》的第一章。这一章我先带大家理解核心概念:什么是GVCF?为什么要用群体联合方式?GATK那一套流程到底怎么串起来的?
我刚开始接触这个领域时,也觉得“GVCF”不过是个中间文件格式,后来做过几个大规模群体项目后才发现,这玩意儿是整个群体遗传分析的基石。说白了,GVCF就是每个样本在每个位点的“概率快照”,而联合基因分型则是把这些快照拼成一张完整的群体“基因型地图”。
1.1 应用场景:谁需要群体联合基因分型?
你想想看,每次做几十个、几百个甚至上千个样本的WGS或WES,如果每个样本单独跑HaplotypeCaller然后直接过滤,不仅慢,而且丢失了群体中的等位基因频率信息。群体联合基因分型正好解决两个核心问题:
- 多重检测能力:利用所有样本的read证据,检测低频率的变异,尤其是那些只有少数样本携带的稀有突变。
- 一致性校正:用群体层面的LD信息和比对质量,重新校准每个样本的基因型概率,减少假阳性。
主要场景包括:
| 场景 | 典型样本量 | 联合分型优势 |
|---|---|---|
| GWAS(全基因组关联研究) | 数百~数千 | 统一质量过滤,提高关联统计功效 |
| 人群遗传结构分析 | 上千 | 精确估算等位基因频率,支持PCA/Admixture |
| 家系/罕见病研究 | 数十~数百 | 发现共有稀有变异,降低假阳性 |
| 临床肿瘤panel | 10~100 | 减少批次效应,提高体细胞突变检测一致性 |
举个例子,我在做一个人群队列项目时,200个样本单独跑VCF,然后合并过滤,结果在一个已知癌症相关基因上发现一个低频突变,但单一样本的QUAL太低被过滤掉了。后来用联合基因分型重新跑,那个位点的GQ从20直接提高到99,群体中其他样本也有部分支持reads。这才把它重新捞回来。
1.2 GATK工作流简介:从BAM到群体VCF
GATK推荐的群体联合基因分型工作流分为三个阶段:
- 单样本GVCF生成:使用HaplotypeCaller的GVCF模式,对每个样本输出.g.vcf.gz。
- 数据库构建:用GenomicsDBImport将多个GVCF导入一个分区块的GenomicsDB。
- 联合基因分型:用GenotypeGVCFs从数据库中读取所有样本信息,输出最终的群体VCF。
为什么要有这个中间数据库?因为直接合并几百个GVCF文件会造成巨大的内存开销。GenomicsDBImport将基因组切分成区间,每个区间独立建库,再并行调用GenotypeGVCFs,效率高得多。我个人习惯是每个染色体分成几个区间,避免单个数据库文件过大。
下面是一个典型的流程命令示例(仅供参考,具体调优后面章节会细讲):
# 第1步:单样本GVCF
gatk HaplotypeCaller \
-R reference.fa \
-I sample1.bam \
-O sample1.g.vcf.gz \
--emit-ref-confidence GVCF \
--pcr-indel-model NONE
# 第2步:构建GenomicsDB(以chr20为例)
gatk GenomicsDBImport \
--genomicsdb-workspace-path my_database \
--batch-size 50 \
-L chr20 \
--sample-name-map sample_map.txt \
--reader-threads 5
# 第3步:联合基因分型
gatk GenotypeGVCFs \
-R reference.fa \
-V gendb://my_database \
-O cohort.chr20.vcf.gz
这里有个陷阱:--sample-name-map文件一定要与GVCF文件名一一对应,我曾经因为文件名中有一个特殊字符没转义,数据库构建到一半报错,排查了半天才发现是映射文件里的GATK版本格式变了。后面前车之鉴啊。
1.3 GVCF格式的核心:每位点的四状态概率
GVCF与普通VCF最大的区别在于,它记录了每个位点上四种基因型(RR、RA、AA、ref-ref)的似然值,还有Reference Confidence模型。这样在联合分型时,即使某个样本在位点上没有read覆盖,也能用群体先验信息推断出来。
你可以在GVCF文件中看到类似下面这样的区块(省略了部分列):
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT sample1
chr20 104 . G A 1000 . ...
GT:AD:GQ:PL 0/1:30,15:99:200,0,150
注意:GVCF中还会包含非变异位点的记录(通过--emit-ref-confidence GVCF控制),这些位置在后续联合分型时会作为背景信息使用。这也是为什么联合分型能提高低深度位点准确性的原因。
1.4 为什么非要用GVCF?直接合并VCF不行吗?
我最近遇到一位同行,他坚持用bcftools merge直接合并硬过滤后的单样本VCF。这种做法在小样本集(比如5个以内)勉强能用,但一旦超过20个样本,问题就来了:
- 每个样本的VCF只保留通过过滤的变异,低频变异被过早丢弃。
- 合并后无法重新计算GQ和PL,只能做简单的交集/并集。
- 无法利用群体信息校正基因型准确性。
GVCF方式保留了每个位点的原始概率证据,联合分型时再统一做过滤决策,这才是正确的做法。
个人小技巧:如果你项目预算有限,可以在GVCF生成阶段启用--parallelism参数,用多线程加快单样本处理。但注意不要超过服务器的物理核心数,否则会因IO竞争反而变慢。
避坑指南:曾经我在一个超大规模项目(3000例)中直接使用GenomicsDBImport,默认的batch-size=50导致内存溢出。后来我把batch-size降到20,并增加了--tmp-dir到单独的高速SSD,才顺利跑完。建议先在小样本测试集上调好参数再上生产。
1.5 本章知识体系总览
下面这个SVG图梳理了GVCF联合分型的整体流程,从输入BAM到最终的群体VCF,你可以看到数据是如何一层层汇聚的: