Skip to main content

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 列是固定、必需的列:
    1. #CHROM
    2. POS
    3. ID
    4. REF
    5. ALT
    6. QUAL
    7. FILTER
    8. INFO
  • 如果文件里有基因型数据,第 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 个固定字段​

下面逐列解释。

列号名称含义类型/要求
1CHROM染色体String,必需
2POS位置Integer,必需
3ID标识符String
4REF参考碱基String,必需
5ALT替代碱基String
6QUAL质量Numeric
7FILTER过滤状态String
8INFO附加信息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 中断言的错误概率。
  • 公式:−10log⁡10prob(call in ALT is wrong)-10\log_{10} \text{prob(call in ALT is wrong)}。
  • 如果 ALT 是 .,即没有变异,则 QUAL 是 −10log⁡10prob(variant)-10\log_{10} \text{prob(variant)}。
  • 如果 ALT 不是 .,则 QUAL 是 −10log⁡10prob(no variant)-10\log_{10} \text{prob(no variant)}。
  • 如果未知,用 .。
  • 数值类型。

例子:

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 字符串
DBdbSNP 成员
DP跨样本总深度
END变异结束位置,用于符号等位基因
H2HapMap2 成员
H3HapMap3 成员
MQRMS 比对质量
MQ0覆盖该记录的 MAPQ == 0 的 reads 数
NS有数据的样本数
SB该位置的链偏倚
SOMATIC体细胞突变,用于癌症基因组学
VALIDATED经后续实验验证
1000G1000 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|0
    • GQ=48
    • DP=1
    • HQ=51,51

常见保留 FORMAT 键​

键含义类型说明
GT基因型String等位基因值,/ 表示未定相,`
DP读深度Integer该样本在该位置的读深度
FT样本基因型过滤String类似 FILTER;PASS 表示通过,失败码用分号分隔,未应用过滤用 .(你提供的文本中 OCR 可能显示为 DT)
GL基因型似然Float逗号分隔的 log⁡10\log_{10} 似然,顺序为所有可能基因型;有 GT 时按相同倍性,无 GT 时假设二倍体
GLE异倍性基因型似然String用于不确定拷贝数
PLPhred 基因型似然IntegerGL 的 Phred 取整
GPPhred 基因型后验概率Float用于存储插补的基因型概率
GQ条件基因型质量Integer−10log⁡10p(基因型调用错误∣位点是变异)-10\log_{10} p(\text{基因型调用错误} \mid \text{位点是变异})
HQ单倍型质量Integer两个逗号分隔的 Phred 质量
PS相位集Integer同一相位集的定相基因型;未定相时忽略;推荐用集合中第一个变异的位置作为 ID
PQ定相质量Integer预留,用于未来定义定相质量
EC预期替代等位基因计数Integer按 ALT 顺序,逗号分隔
MQRMS 比对质量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

顺序公式:

F(j/k)=(k(k+1)/2)+jF(j/k) = (k(k+1)/2) + j

文档中写作:

F(j/k)=(k∗(k+1)/2)+jF(j/k) = (k*(k+1)/2) + j

缺失值处理​

如果某个字段缺失,用 . 替代。例如:

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:...

逐列解释:

列值含义
CHROM20染色体 20
POS14370位置 14370
IDrs6054257dbSNP rs 号
REFG参考碱基是 G
ALTA替代碱基是 A
QUAL29Phred 质量 29
FILTERPASS通过所有过滤
INFONS=3;DP=14;AF=0.5;DB;H23 个样本有数据,总深度 14,等位基因频率 0.5,dbSNP 成员,HapMap2 成员
FORMATGT:GQ:DP:HQ样本数据格式:基因型、基因型质量、深度、单倍型质量
NA000010|0:48:1:51,51GT=0|0,GQ=48,DP=1,HQ=51,51
NA000021|0:48:8:51,51GT=1|0,GQ=48,DP=8,HQ=51,51
NA000031/1:43:5:...GT=1/1,GQ=43,DP=5,HQ 省略

容易混淆的点​

  1. 表头是 #CHROM,不是 ##CHROM。
  2. 固定 8 列必须存在,且顺序不能变。
  3. 缺失值统一用 .,不要用空字符串。
  4. FILTER 的 PASS 是特殊值,表示通过所有过滤。
  5. INFO 中自定义键必须在头部 ##INFO 里定义。
  6. FORMAT 中自定义键必须在头部 ##FORMAT 里定义。
  7. GT 如果存在,必须是 FORMAT 的第一个子字段。
  8. 样本列数必须和表头样本 ID 数一致。
  9. 有基因型数据时,表头必须有 FORMAT 列。
  10. ALT 中的 ID 是大小写敏感的,但碱基串大小写不敏感。

一句话总结​

  • 1.3 Header line syntax:定义 VCF 的列结构,前 8 列固定,有基因型时加 FORMAT 和样本 ID,全部用 Tab 分隔。
  • 1.4 Data lines:按表头写每一行数据,前 8 列是固定字段,后面按 FORMAT 写样本基因型;缺失值用 .,GT 编码等位基因,/ 未定相,| 定相。