第一讲:VCF文件格式解析——结构、字段与元数据行
大家好,我是老赵。今天我们正式开始《多批次VCF一致性分析实战》。
先聊点实在的。你在生信分析中肯定见过VCF文件,对吧?
但你真的「读」懂过它吗?
我见过太多人直接把VCF当成一个「带坐标的变异列表」,然后就开始跑分析工具。结果后面比对结果、做一致性分析时,发现样本名匹配不上、字段含义搞混、元数据行被忽略…最后整个分析结论都得重来。
所以第一讲,我们先啃VCF这块「硬骨头」。你把它彻底搞懂了,后面30章的实战才有根。
1.1 VCF到底是什么?
VCF全称 Variant Call Format。说白了,就是记录样本在基因组上「哪里发生了变异」,以及「变异的具体细节」。它由国际基因组样本联盟(1000 Genomes Project)推广,现在已经是生信界的标准了。
为什么重要?因为所有变异位点信息——SNV、Indel、结构变异、基因型——都可以塞进这个文本文件里。你想从多个批次中找出「同一个样本的同一块变异」,必须先把VCF的结构理清。
元数据行不是注释,是「字典」。数据行不是表格,是「记录集」。
1.2 元数据行(Meta-information lines)
先看第1行:
##fileformat=VCFv4.2
这行告诉你当前文件使用的VCF版本。我自己的习惯是遇到VCF文件,先看这一行。4.0和4.2在某些字段定义上有细微差别,不注意就会掉坑。
然后就是大量的 ##INFO、##FORMAT、##FILTER 等定义行。举个例子:
##INFO=
##FORMAT=
##FILTER=
##contig=
很多人觉得元数据行「无关紧要」,直接跳过。我曾经犯过这个错误——有一次批处理时发现样本名始终对不上,结果回看才是 ##SAMPLE 元数据行里把样本ID写错了。从那以后,我每个VCF都要检查元数据行。
grep '^##' input.vcf | head -20
这样一秒就能看清文件使用的reference、样本名、以及所有自定义标签。
1.3 数据行(Data lines)
数据行以 #CHROM 开头的表头行作为分界。表头行格式如下:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT sample1 sample2
记住每一列的位置,后面的一致性比对就是基于这些列做键值匹配。
一条典型的数据行:
chr1 1000 rs12345 A G 50.0 PASS DP=100;AF=0.5 GT:DP:GQ 0/1:50:99 1/1:49:99
从第10列开始,就是样本列。每个样本列是一个「字段名=值」的组合,字段名由FORMAT字段定义。
嗯,这里要留意一个细节:FORMAT列里定义的标签顺序,直接对应后面样本列中值的顺序。一旦标签顺序写错了、多了一个,整个样本的基因型就解析错误。我见过有人手动编辑VCF样本列,结果顺序搞反,导致后面做一致性分析时全乱了。
1.4 关键字段说明
| 列名 | 含义 | 典型值 | 我的备注 |
|---|---|---|---|
| CHROM | 染色体名称 | chr1, 1, NC_000001.11 | 不同批次可能用不同命名约定 |
| POS | 变异在染色体上的起始位置 | 1000 | 基准从1开始 |
| ID | 变异标识符(通常dbSNP ID) | rs12345, . | 如果是点,表示无rs号 |
| REF | 参考等位基因 | A, C, AT | 对InDel需要小心 |
| ALT | 替代等位基因 | G, T, *, <DEL> | 多等位用逗号分隔 |
| QUAL | 质量值(Phred评分) | 50.0 | 30以上通常可信任 |
| FILTER | 过滤状态 | PASS, LowQual, . | 如果是点表示未过滤 |
| INFO | 变异级别信息(键=值对) | DP=100;AF=0.5 | 关键信息的仓库 |
| FORMAT | 样本字段定义 | GT:DP:GQ | 多字段用冒号隔开 |
| 样本列 | 每个样本的基因型/深度等 | 0/1:50:99 | 与FORMAT列一一对应 |
我刚开始接触生物信息学时,花了很长时间去理解INFO和FORMAT的差异。其实一句话就能说清:INFO是变异级别的属性(对所有样本都适用),FORMAT是样本级别的属性(每个样本不同)。你想想看,这个区别非常重要——在做多批次一致性分析时,你要选对字段做比较,否则分析就偏了。
1.5 基因型(GT)字段深度解析
GT(Genotype)是所有样本字段中最核心的一个。它用「/」或「|」分隔两个数字,表示父源和母源的等位基因。
举个例子:
0/0:纯合参考(没有变异)0/1:杂合(一个参考,一个变异)1/1:纯合变异1/2:两个不同的变异等位基因./.:缺失,表示没有检测到基因型
在实际项目中,./. 的样本列很容易被忽略。我记得有一次做三个批次的一致性分析,一个样本在第一批次是 0/1,在第二批次是 ./.。如果我不在意这个缺失值,直接把它当成「未变异」来处理,结论就完全反了。
./.,先排查测序深度或比对质量问题。
1.6 本章知识体系图
为了方便你记住VCF的核心结构,我画了一张框架图。你看完应该能建立起整体认知。
1.7 实操小练习
光看不够,我建议你动手。随便找一个手上的VCF文件,打开看看:
less yourfile.vcf
先看前10行(元数据),再看表头行。然后数一数样本列有多少个,FORMAT列里定义了哪些标签。如果能把元数据行中的 ##contig、##INFO、##FORMAT 都理解一遍,你对VCF的「骨架」就有了把握。
1. 看版本号(第1行)
2. 看样本名(表头行第10列以后)
3. 看FORMAT字段(至少确认GT和DP两个存在)
做完这三步,再往下读数据。
这一讲的内容就到这里。记住VCF的结构,后面我们做多批次比对、合并、差异分析时,才能游刃有余。