VCF 文件基础:格式详解与临床关键字段

做临床变异解读,每天打交道最多的文件就是 VCF。我刚入行那会儿,觉得 VCF 不就是个表格嘛,几列数据而已。直到有一次解读一份罕见病家系数据,因为忽略了一个 FILTER 标签,差点把假阳性报成了致病位点……嗯,从那以后我再看 VCF,每个字段都不敢马虎。

一个 VCF 记录长什么样

先看一条实际记录,你感受一下:

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO
chr1    123456  rs123   A       G       100     PASS    AC=5;AF=0.01;AN=500;CLNSIG=Pathogenic

VCF 每行代表一个变异位点,固定 8 个字段,用制表符分隔。这 8 个字段缺一个都不行,是 VCF 规范的硬性要求。

字段含义临床解读要点
CHROM染色体编号注意 chr 前缀是否统一
POS变异位置(1-based)与参考基因组版本对应
IDdbSNP 或其它数据库 IDrs 号可辅助查找已知位点
REF参考等位基因与参考序列严格一致
ALT替代等位基因多个 ALT 用逗号分隔
QUAL变异质量值越高越可靠,但别只看它
FILTER过滤状态PASS 才能进入解读流程
INFO注释信息临床标签都在这里
我的习惯:拿到 VCF 第一件事,不是看变异列表,而是先看 #CHROM 头行和 FILTER 列。头行告诉你用了哪个参考基因组版本,FILTER 列直接决定哪些位点值得看。

QUAL 字段——不只是数字

QUAL 是 Phred 质量值,公式是 -10 * log10(P(错误))。数值越高,测序或比对认为这个变异是真实的可能性越大。比如 QUAL=100,意味着错误概率是 10-10,相当可靠。

但我要提醒一句:QUAL 高不代表临床意义大。我在项目里见过 QUAL=999 的同义突变,也见过 QUAL=30 的致病剪接位点。QUAL 只反映测序质量,不反映生物学功能。

避坑指南:有些流程会把低 QUAL 位点直接标为 LowQual,但不会删掉。如果你不做 QUAL 过滤,这些位点会混在结果里。我建议临床解读只保留 QUAL ≥ 20 的位点,相当于错误率 ≤ 1%。

FILTER 字段——PASS 不是唯一答案

FILTER 字段记录这个变异是否通过了质控。如果通过,就是 PASS;没通过,会写具体原因,比如:

PASS
VQSRTrancheSNP99.90to100.00
LowQual
IndelFilter
Fail

你可能会问:为什么不过滤掉非 PASS 的位点?因为有些场景下,非 PASS 位点也有参考价值。比如肿瘤体细胞变异中,LowQual 的位点可能暗示低频克隆,值得复查,而不是直接丢弃。

但在临床遗传解读中,我建议严格一些:只解读 FILTER = PASS 的变异。非 PASS 位点可以写在备注里,但不要作为主要证据。

一次教训:我曾经用一份公开 VCF 做分析,没检查 FILTER 列,直接跑了注释。后来发现一批 "致病" 位点全是 VQSRTrancheSNP99.95to100.00 过滤掉的——嗯,从那以后我把 FILTER 检查写进了每个管线的第一步。

INFO 字段——临床注释的宝藏

INFO 字段是 VCF 里最复杂、也最值钱的部分。它以 key=value 的格式存储,多个条目用分号分隔。临床解读中,我们重点关注以下标签:

INFO 标签全称临床解读用途
ACAllele Count该等位基因在人群中的出现次数
AFAllele Frequency人群频率,AF > 0.01 通常排除致病
ANAllele Number该位点覆盖的等位基因总数
DPDepth of Coverage测序深度,DP < 10 要谨慎
CLNSIGClinical SignificanceClinVar 临床意义:Pathogenic, Benign 等
CLNDNClinical Disease Name关联的疾病名称
CLNREVSTATClinVar Review Status审核状态:reviewed_by_expert, criteria_provided 等
CLNVCClinVar Variant Type变异类型:single_nucleotide_variant, deletion 等
MAX_AFMaximum Allele Frequency所有人群中的最大频率,比 AF 更严格
一个小技巧:CLNREVSTAT 这个标签容易被忽略,但它很关键。如果一条 ClinVar 记录是 no_assertion_criteria_provided,即使 CLNSIG 写着 Pathogenic,可信度也要打折扣。我一般只采用 reviewed_by_expert 或 criteria_provided 的条目。

临床解读中的字段协作

QUAL、FILTER、INFO 三个字段不是孤立工作的。我画了一张图,帮你理解它们在临床解读流程中的协作关系:

VCF 临床解读字段协作流程 VCF 变体记录 QUAL 质量值 FILTER 过滤标签 INFO 注释信息 临床解读关键标签 CLNSIG · CLNDN · CLNREVSTAT · CLNVC AC · AF · AN · DP · MAX_AF QUAL 决定测序可靠性,FILTER 决定是否纳入解读,INFO 提供临床注释——三者缺一不可
一句话总结:QUAL 看可靠性,FILTER 看合规性,INFO 看临床意义。三条线汇合,才能判断一个变异该不该报。

实战避坑指南

  • FILTER 列空值:有些 VCF 的 FILTER 列是 .,表示没做过滤。这种数据不要直接用于临床,至少跑一遍 GATK VQSR 或硬过滤。
  • INFO 标签名大小写:ClinVar 的标签通常是 CLNSIG 全大写,但有些注释工具会写成 CLNsig。我在整合多来源 VCF 时踩过这个坑——大小写不一致导致合并漏数据。建议统一用大写解析。
  • AC/AF/AN 单位:AC 是计数,AF 是频率,AN 是总数。举个例:AN=1000, AC=5, AF=0.005。如果你只看 AF 不看 AN,可能会误判。AN 太小(比如 < 100)的位点,人群频率不可靠。
  • DP 与 QUAL 的关系:DP 高 QUAL 不一定高(比如有链偏好),QUAL 高 DP 不一定高(比如唯一一条 reads 但质量极好)。两个指标要结合看,不能互相替代。
再强调一次:临床解读用的 VCF,一定要走完整的质控管线。我见过有人直接拿 GATK 4 的 VCF 做解读,没跑 VQSR,也没看 FILTER 列——嗯,结果里混了不少假阳性。别省这一步。

VCF 的 QUAL、FILTER、INFO 三个字段,就是临床解读的三道关卡。每道关卡都有它的脾气,摸透了,你手里的 VCF 就不再是 "天书",而是一张清晰的变异地图。