1.3 Header & 1.4 Data
下面把 VCF 的 1.3 Header line syntax 和 1.4 Data lines 拆开讲清楚。你可以把 VCF 理解成一种特殊的 TSV 表格:
##开头的是元信息,像数据库 schema;#CHROM ...是表头,定义每一列;- 后面的行是数据行,每一行对应一个基因组位置。
1.3 Header line syntax:表头行语法
1.3.1 表头长什么样
一个带基因型数据的 VCF 表头通常长这样:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003
注意:
- 表头行以单个
#开头,不是##。 - 所有列用 Tab 分隔,不是空格。
- 前 8 列是固定、必需的列:
#CHROMPOSIDREFALTQUALFILTERINFO
- 如果文件里有基因型数据,第 9 列必须是
FORMAT,后面再跟任意数量的样本 ID。 - 样本 ID 不能重复。
- 如果文件没有基因型数据,表头到
INFO就结束,不需要FORMAT和样本列。
1.3.2 为什么表头重要
表头告诉解析器:
- 每一列是什么;
- 从第几列开始是样本数据;
- 每个样本列内部又按什么格式拆分。
例如:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003
解析器读到后就知道:
- 第 1 列是染色体;
- 第 2 列是位置;
- …
- 第 9 列是
FORMAT,说明样本列里的数据格式; - 第 10、11、12 列分别是样本
NA00001、NA00002、NA00003。
1.3.3 常见错误
- 表头列数少于数据行列数,或者多出来。
- 样本 ID 重复。
- 用空格而不是 Tab 分隔。
- 有基因型数据但漏写
FORMAT列。 - 把
#CHROM写成##CHROM。
1.4 Data lines:数据行
数据行是 VCF 的主体,每一行描述一个基因组位置上的变异或基因型信息。
总规则:
- 所有数据行都用 Tab 分隔。
- 缺失值统一用点
.表示。 - 每一行必须和表头的列一一对应。
- 前 8 列是固定字段,后面如果表头有
FORMAT和样本列,就按FORMAT的格式继续写。
1.4.1 Fixed fields:8 个固定字段
下面逐列解释。
| 列号 | 名称 | 含义 | 类型/要求 |
|---|---|---|---|
| 1 | CHROM | 染色体 | String,必需 |
| 2 | POS | 位置 | Integer,必需 |
| 3 | ID | 标识符 | String |
| 4 | REF | 参考碱基 | String,必需 |
| 5 | ALT | 替代碱基 | String |
| 6 | QUAL | 质量 | Numeric |
| 7 | FILTER | 过滤状态 | String |
| 8 | INFO | 附加信息 | String |
1. CHROM:染色体
- 可以是参考基因组的染色体名,例如
20、chr1、X。 - 也可以写成尖括号形式
<ID>,指向 assembly 文件里的 contig。 - 同一个
CHROM的记录应该在文件里连续成块出现。 - 不能包含空白字符。
- 必需。
例子:
20 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2
这里 CHROM 就是 20。
2. POS:位置
- 参考位置,从 1 开始计数,第一个碱基位置是 1。
- 在同一个
CHROM内,位置按数值递增排序。 - 允许多条记录有相同的
POS。 - 端粒可以用位置
0或N+1表示,N是染色体或 contig 长度。 - 整数,必需。
例子:
20 14370 ...
表示位置 14370。
3. ID:标识符
- 用分号分隔的唯一标识符列表。
- 如果是 dbSNP 变异,推荐用 rs 号,例如
rs6054257。 - 一个 ID 不应该出现在多个数据记录里。
- 如果没有 ID,用
.。 - 不能包含空白或分号。
例子:
20 14370 rs6054257 G A ...
ID 是 rs6054257。
如果写成:
20 17330 . T A ...
表示这个位点没有 ID。
4. REF:参考碱基
- 参考序列上的碱基。
- 每个碱基必须是
A,C,G,T,N之一,大小写不敏感。 - 允许多个碱基。
POS指向REF字符串的第一个碱基。- 对于简单插入/缺失,如果
REF或某个ALT本来会是空,则REF和ALT必须包含事件前一个碱基,并且POS反映这个前一个碱基的位置。 - 如果事件发生在 contig 位置 1,则必须包含事件后一个碱基。
- 如果
ALT是符号等位基因,例如<DEL>,则必须有 padding base,POS表示多态性前一个碱基的坐标。 - 工具处理 VCF 时不一定保留大小写。
- 必需。
举例:
-
缺失 C:
20 2 . TC T . PASS DP=100这里
REF=TC,ALT=T,POS=2,表示从位置 2 开始的 C 被删除。 -
插入 A:
20 2 . TC TCA . PASS DP=100这里
REF=TC,ALT=TCA,表示在 C 后面插入 A。
5. ALT:替代碱基
- 逗号分隔的替代非参考等位基因列表。
- 这些等位基因不一定在所有样本中都被调用。
- 可以是:
- 碱基串,由
A,C,G,T,N,*组成,大小写不敏感; - 尖括号 ID 字符串,例如
<DEL>、<DUP>; - breakend 替换字符串,例如
G[17:198982[。
- 碱基串,由
*是保留符号,表示由于上游缺失导致该等位基因缺失。- 如果没有替代等位基因,用
.。 - 工具不一定保留大小写,但 ID 是大小写敏感的。
- ID 字符串本身不能包含空白、逗号或尖括号。
例子:
20 1110696 rs6040355 A G,T 67 PASS NS=2;DP=10;AF=0.333,0.667;AA=T;DB
这里 ALT=G,T,表示有两个替代等位基因:G 和 T。
6. QUAL:质量
- Phred 缩放的质量分数,表示 ALT 中断言的错误概率。
- 公式:。
- 如果
ALT是.,即没有变异,则 QUAL 是 。 - 如果
ALT不是.,则 QUAL 是 。 - 如果未知,用
.。 - 数值类型。
例子:
20 14370 rs6054257 G A 29 PASS ...
QUAL=29。
7. FILTER:过滤状态
PASS表示这个位置通过了所有过滤,即在当前位置做出了调用。- 否则,用分号分隔失败过滤码,例如
q10;s50。 0是保留值,不应作为过滤码。- 如果还没有应用过滤,用
.。 - 不能包含空白或分号。
例子:
20 17330 . T A 3 q10 NS=3;DP=11;AF=0.017
FILTER=q10,表示质量低于 10,被过滤掉。
8. INFO:附加信息
- 用分号分隔的键值对,格式为
<key>=<data>[data]。 - 如果没有键,用
.。 - 不能包含空白、分号或等号;逗号只能作为值列表的分隔符。
- 任意键都允许,但以下子字段是保留的,虽然可选:
| 保留 INFO 键 | 含义 |
|---|---|
AA | 祖先等位基因 |
AC | 基因型中等位基因计数,每个 ALT 一个,按 ALT 顺序 |
AF | 每个 ALT 的等位基因频率,按 ALT 顺序 |
AN | 已调用基因型中的总等位基因数 |
BQ | 该位置的 RMS 碱基质量 |
CIGAR | 描述 ALT 等位基因如何比对到 REF 的 CIGAR 字符串 |
DB | dbSNP 成员 |
DP | 跨样本总深度 |
END | 变异结束位置,用于符号等位基因 |
H2 | HapMap2 成员 |
H3 | HapMap3 成员 |
MQ | RMS 比对质量 |
MQ0 | 覆盖该记录的 MAPQ == 0 的 reads 数 |
NS | 有数据的样本数 |
SB | 该位置的链偏倚 |
SOMATIC | 体细胞突变,用于癌症基因组学 |
VALIDATED | 经后续实验验证 |
1000G | 1000 Genomes 成员 |
- 键可以没有值,用来表示组成员资格,例如
H2表示该 SNP 在 HapMap2 中。 - 不需要列出所有不存在的属性,例如不需要写
H2=0。 - 每个 INFO 子字段的准确格式应在元信息中定义。
例子:
20 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2
这里:
NS=3:有 3 个样本有数据;DP=14:总深度 14;AF=0.5:等位基因频率 0.5;DB:dbSNP 成员;H2:HapMap2 成员。
1.4.2 Genotype fields:基因型字段
如果 VCF 包含基因型信息,表头会有 FORMAT 列和样本列。数据行中,每个样本列都按 FORMAT 指定的格式书写。
规则:
- 所有样本的数据类型必须相同。
FORMAT是冒号分隔的字母数字字符串,指定数据类型的顺序。- 每个样本列用冒号分隔,顺序必须和
FORMAT一致。 - 如果
GT存在,它必须是第一个子字段。 - 没有必需的子字段。
- 如果某个字段缺失,用
.替代。 - 尾随字段可以省略,但
GT如果指定在FORMAT中,应该始终存在。
例子:
FORMAT NA00001 NA00002 NA00003
GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:...
这里:
FORMAT=GT:GQ:DP:HQ;- 样本
NA00001的值是0|0:48:1:51,51,对应:GT=0|0GQ=48DP=1HQ=51,51
常见保留 FORMAT 键
| 键 | 含义 | 类型 | 说明 |
|---|---|---|---|
GT | 基因型 | String | 等位基因值,/ 表示未定相,` |
DP | 读深度 | Integer | 该样本在该位置的读深度 |
FT | 样本基因型过滤 | String | 类似 FILTER;PASS 表示通过,失败码用分号分隔,未应用过滤用 .(你提供的文本中 OCR 可能显示为 DT) |
GL | 基因型似然 | Float | 逗号分隔的 似然,顺序为所有可能基因型;有 GT 时按相同倍性,无 GT 时假设二倍体 |
GLE | 异倍性基因型似然 | String | 用于不确定拷贝数 |
PL | Phred 基因型似然 | Integer | GL 的 Phred 取整 |
GP | Phred 基因型后验概率 | Float | 用于存储插补的基因型概率 |
GQ | 条件基因型质量 | Integer | |
HQ | 单倍型质量 | Integer | 两个逗号分隔的 Phred 质量 |
PS | 相位集 | Integer | 同一相位集的定相基因型;未定相时忽略;推荐用集合中第一个变异的位置作为 ID |
PQ | 定相质量 | Integer | 预留,用于未来定义定相质量 |
EC | 预期替代等位基因计数 | Integer | 按 ALT 顺序,逗号分隔 |
MQ | RMS 比对质量 | Integer | 类似 INFO 中的 MQ |
GT 的编码方式
0表示 REF 等位基因。1表示 ALT 中第一个等位基因。2表示 ALT 中第二个等位基因,以此类推。- 二倍体例子:
0/1、1|0、1/2。 - 单倍体例子:
0、1(例如 Y 染色体、男性非拟常染色体 X、线粒体)。 - 三倍体例子:
0/0/1。 - 无法调用时,每个缺失等位基因写
.,例如./.表示二倍体缺失,.表示单倍体缺失。 /表示未定相,|表示定相。
GL / PL 的基因型顺序
如果 REF 是 A,ALT 是 B、C……,则二倍体基因型顺序为:
- 双等位:
AA, AB, BB - 三等位:
AA, AB, BB, AC, BC, CC
顺序公式:
文档中写作:
缺失值处理
如果某个字段缺失,用 . 替代。例如:
GT:GQ:DP:HQ 0|0:.:23:23,34
表示 GQ 缺失。
尾随字段可以省略,但 GT 如果出现在 FORMAT 中,应该始终存在。
综合例子拆解
看一行完整数据:
20 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:...
逐列解释:
| 列 | 值 | 含义 |
|---|---|---|
| CHROM | 20 | 染色体 20 |
| POS | 14370 | 位置 14370 |
| ID | rs6054257 | dbSNP rs 号 |
| REF | G | 参考碱基是 G |
| ALT | A | 替代碱基是 A |
| QUAL | 29 | Phred 质量 29 |
| FILTER | PASS | 通过所有过滤 |
| INFO | NS=3;DP=14;AF=0.5;DB;H2 | 3 个样本有数据,总深度 14,等位基因频率 0.5,dbSNP 成员,HapMap2 成员 |
| FORMAT | GT:GQ:DP:HQ | 样本数据格式:基因型、基因型质量、深度、单倍型质量 |
| NA00001 | 0|0:48:1:51,51 | GT=0|0,GQ=48,DP=1,HQ=51,51 |
| NA00002 | 1|0:48:8:51,51 | GT=1|0,GQ=48,DP=8,HQ=51,51 |
| NA00003 | 1/1:43:5:... | GT=1/1,GQ=43,DP=5,HQ 省略 |
容易混淆的点
- 表头是
#CHROM,不是##CHROM。 - 固定 8 列必须存在,且顺序不能变。
- 缺失值统一用
.,不要用空字符串。 FILTER的PASS是特殊值,表示通过所有过滤。INFO中自定义键必须在头部##INFO里定义。FORMAT中自定义键必须在头部##FORMAT里定义。GT如果存在,必须是FORMAT的第一个子字段。- 样本列数必须和表头样本 ID 数一致。
- 有基因型数据时,表头必须有
FORMAT列。 ALT中的 ID 是大小写敏感的,但碱基串大小写不敏感。
一句话总结
- 1.3 Header line syntax:定义 VCF 的列结构,前 8 列固定,有基因型时加
FORMAT和样本 ID,全部用 Tab 分隔。 - 1.4 Data lines:按表头写每一行数据,前 8 列是固定字段,后面按
FORMAT写样本基因型;缺失值用.,GT编码等位基因,/未定相,|定相。