5 Representing variation in VCF records
下面详细讲解 VCF 规范第 5 节 “Representing variation in VCF records”。这一节是 VCF 的核心:它告诉你如何把真实 DNA 变异写成 VCF 行,以及如何从 VCF 行还原出单倍型。内容从简单 SNP 一直讲到复杂结构变异和断点表示。
5.1 Creating VCF entries for SNPs and small indels
5.1.1 基本思想
VCF 记录的本质是:
在参考基因组的位置
POS,把REF这段序列替换成ALT这段序列。
参考单倍型:a-REF-t
替代单倍型:a-ALT-t
其中 a 和 t 是 REF 左右两侧的侧翼序列。
5.1.2 例子 1:SNP、插入、缺失
假设参考序列在某个位点附近是:
| 示例 | 序列 | 说明 |
|---|---|---|
| Ref | a t C g a | C 是参考碱基 |
| 1 | a t G g a | C 变成 G(SNP) |
| 2 | a t - g a | C 被删除 |
| 3 | a t C A g a | 在 C 后插入 A |
对应的 VCF 记录:
#CHROM POS ID REF ALT QUAL FILTER INFO
20 3 . C G . PASS DP=100
20 2 . TC T . PASS DP=100
20 2 . TC TCA . PASS DP=100
解释:
- SNP:
POS=3,REF=C,ALT=G。参考单倍型...t C g...→ 替代...t G g...。 - 缺失:
POS=2,REF=TC,ALT=T。参考...t C g...→ 替代...t - g...。注意REF包含事件前一个碱基T,POS指向这个T。 - 插入:
POS=2,REF=TC,ALT=TCA。参考...t C g...→ 替代...t C A g...。同样REF包含前一个碱基T。
关键规则:对于简单插入/缺失,如果 REF 或 ALT 本来会是空,必须包含事件前一个碱基;如果事件发生在 contig 位置 1,则包含事件后一个碱基。
5.1.3 例子 2:多个分离等位基因
假设群体中有三个等位基因:
| 示例 | 序列 | 说明 |
|---|---|---|
| Ref | a t C g a | 参考 |
| 1 | a t G g a | C→G |
| 2 | a t - g a | C 缺失 |
对应 VCF:
#CHROM POS ID REF ALT QUAL FILTER INFO
20 2 . TC TG,T . PASS DP=100
这里 REF=TC,ALT=TG,T。
TC是参考等位基因。TG表示 C→G 的 SNP。T表示 C 缺失。
所以有三个分离等位基因:TC、TG、T。
5.1.4 例子 3:复杂混合
假设有四个分离等位基因:{tCg, tg, t, tCAg},对应序列:
| 示例 | 序列 | 说明 |
|---|---|---|
| Ref | a t C g a | 参考 |
| 1 | a t - g a | C 缺失 |
| 2 | a t - - a | C 和 G 都缺失 |
| 3 | a t C A g a | 在 C 后插入 A |
VCF 写成:
#CHROM POS ID REF ALT QUAL FILTER INFO
20 2 . TCG TG,T,TCAG PASS DP=100
注意:VCF 不保留碱基对齐的等价性,只记录替换关系。记录类型(SNP、Indel、Mixed、Reference)由 REF/ALT 动态决定。
5.2 Decoding VCF entries for SNPs and small indels
这一节讲如何从 VCF 记录还原单倍型。
5.2.1 SNP
VCF:
20 3 . C T . PASS DP=100
还原:
| 示例 | 序列 | 说明 |
|---|---|---|
| Ref | a t C g a | 参考 |
| 1 | a t T g a | C→T |
5.2.2 插入
VCF:
20 3 . C CTAG . PASS DP=100
还原:
| 示例 | 序列 | 说明 |
|---|---|---|
| Ref | a t C - - - g a | 参考 |
| 1 | a t C T A G g a | 在 C 后插入 TAG |
5.2.3 缺失
VCF:
20 2 . TCG T . PASS DP=100
还原:
| 示例 | 序列 | 说明 |
|---|---|---|
| Ref | a T C G a | 参考 |
| 1 | a T - - a | 删除 CG |
5.2.4 微卫星混合
VCF:
20 4 . GCG G,GCGCG . PASS DP=100
三个等位基因:GCG、G、GCGCG。
还原时可以有多种等价对齐,例如:
参考:a t c G C G - - a
等位1:a t c G - - - - a (缺失 2 个碱基)
等位2:a t c G C G C G a (插入 2 个碱基)
VCF 不指定具体对齐,只保证最终序列正确。
5.3 Encoding Structural Variants
结构变异(SV)跨度大、可能不精确,通常用符号 ALT 表示,例如 <DEL>、<DUP>、<INV>、<CNV>。
文档第 11 页给了一些例子,概括如下:
- 精确缺失:已知断点,有 1 bp 微同源,样本纯合缺失。
- 不精确缺失:约 205 bp。
- ALU 元件缺失:不精确。
- L1 插入:不精确。
- 不精确重复:约 21 kb,样本拷贝数 3。
- 串联重复:76 bp,样本拷贝数 5,但单倍型未知。
这些例子用 SVTYPE、END、SVLEN、IMPRECISE 等 INFO 键描述。具体编码方式在第 3 节已讲。
5.4 Specifying complex rearrangements with breakends
这是第 5 节最复杂的部分:如何用 breakend(断点) 表示任意重排。
5.4.1 核心概念
一个重排事件可以看成一组新的邻接关系。每个邻接连接两个 breakend,它们互为 mate。
每个 breakend 用一行 VCF 表示,INFO 中写 SVTYPE=BND。
REF 字段:从 POS 开始的一段参考序列 s。
ALT 字段:替换 s 的字符串,包含三部分:
- 替换后的字符串
t(可能包含插入序列)。 - mate 的位置
p,格式chr:pos。 - 连接方向,用方括号
[或]表示。
四种 ALT 语法:
| REF | ALT | 含义 |
|---|---|---|
s | t[p[ | 从 p 向右延伸的片段接在 t 后面 |
s | t[p] | 从 p 向左延伸的反向互补片段接在 t 后面 |
s | ]p]t | 从 p 向左延伸的片段接在 t 前面 |
s | [p[t | 从 p 向右延伸的反向互补片段接在 t 前面 |
5.4.2 例子:3-break 操作
图 1 展示 6 个 breakend 的所有方向:
| #CHROM | POS | ID | REF | ALT | INFO |
|---|---|---|---|---|---|
| 2 | 321681 | bnd_W | G | G[17:198982[ | SVTYPE=BND |
| 2 | 321682 | bnd_V | T | ]13:123456]T | SVTYPE=BND |
| 13 | 123456 | bnd_U | C | C[2:321682[ | SVTYPE=BND |
| 13 | 123457 | bnd_X | A | ]17:198983]A | SVTYPE=BND |
| 17 | 198982 | bnd_Y | A | A]2:321681] | SVTYPE=BND |
| 17 | 198983 | bnd_Z | C | C[13:123457[ | SVTYPE=BND |
5.4.3 插入序列
如果两个 breakend 之间有插入序列,直接写在 ALT 的 t 中:
2 321682 bnd_V T ]13:123456]AGTNNNNNCAT 6 PASS SVTYPE=BND;MATEID=bnd_U
13 123456 bnd_U C CAGTNNNNNCAT[2:321682[ 6 PASS SVTYPE=BND;MATEID=bnd_V
5.4.4 大插入:用 contig 表示
如果插入太长,可以用 assembly 文件中的 contig 表示:
13 123456 bnd_U C C[<ctg1>:1[ 6 PASS SVTYPE=BND
13 123457 bnd_V A ]<ctg1>:329]A 6 PASS SVTYPE=BND
如果只插入 contig 的一部分:
13 123456 bnd_U C C[<ctg1>:7[ 6 PASS SVTYPE=BND
13 123457 bnd_V A ]<ctg1>:214]A 6 PASS SVTYPE=BND
如果 contig 是环状的,可以加循环邻接:
13 123456 bnd_U C C[<ctg1>:229[ 6 PASS SVTYPE=BND
13 123457 bnd_V A ]<ctg1>:45]A 6 PASS SVTYPE=BND
<ctg1> 1 bnd_X A ]<ctg1>:329]A 6 PASS SVTYPE=BND
<ctg1> 329 bnd_Y T T[<ctg1>:1[ 6 PASS SVTYPE=BND
对于完整插入,可以用简写:
13 321682 INS0 T C<ctg1> 6 PASS SVTYPE=INS
5.4.5 多个 mate
一个 breakend 可以有多个 mate,这时 ALT 写成逗号分隔的多个替代邻接:
2 321682 bnd_V T ]13:123456]T 6 PASS SVTYPE=BND;MATEID=bnd_U
13 123456 bnd_U C C[2:321682[;C[17:198983[ 6 PASS SVTYPE=BND;MATEID=bnd_V,bnd_Z
17 198983 bnd_Z A ]13:123456]A 6 PASS SVTYPE=BND;MATEID=bnd_U
5.4.6 显式 partner
参考基因组中相连但在变异中断开的两个 breakend 叫 partner。可以用 PARID 显式指定:
2 321681 bnd_W G G[13:123460[ 6 PASS PARID=bnd_V;MATEID=bnd_X
2 321682 bnd_V T ]13:123456]T 6 PASS PARID=bnd_W;MATEID=bnd_U
13 123456 bnd_U C C[2:321682[ 6 PASS PARID=bnd_X;MATEID=bnd_V
13 123460 bnd_X A ]2:321681]A 6 PASS PARID=bnd_U;MATEID=bnd_W
5.4.7 端粒
端粒用虚拟 breakend 表示:位置 0 和 N+1。例如整个 1 号染色体易位到 13 号:
1 0 bnd_X N N[13:123457[ 6 PASS SVTYPE=BND;MATEID=bnd_V
1 1 bnd_Y T ]13:123456]T 6 PASS SVTYPE=BND;MATEID=bnd_U
13 123456 bnd_U C C[1:1[ 6 PASS SVTYPE=BND;MATEID=bnd_Y
13 123457 bnd_V A ]1:0]A 6 PASS SVTYPE=BND;MATEID=bnd_X
5.4.8 事件修饰符
多个邻接可以属于同一个事件,用 EVENT 标记:
2 321681 bnd_W G G[13:123457[ 6 PASS SVTYPE=BND;MATEID=bnd_X;EVENT=RR0
2 321682 bnd_V T ]13:123456]T 6 PASS SVTYPE=BND;MATEID=bnd_U;EVENT=RR0
13 123456 bnd_U C C[2:321682[ 6 PASS SVTYPE=BND;MATEID=bnd_V;EVENT=RR0
13 123457 bnd_X A ]2:321681]A 6 PASS SVTYPE=BND;MATEID=bnd_W;EVENT=RR0
5.4.9 倒位
倒位可以用简写:
2 321681 INV0 G <INV> 6 PASS SVTYPE=INV;END=421681
也可以用 breakend 描述:
2 321681 bnd_W G G[2:421681[ 6 PASS SVTYPE=BND;MATEID=bnd_U;EVENT=INV0
2 321682 bnd_V T ]2:421682]T 6 PASS SVTYPE=BND;MATEID=bnd_X;EVENT=INV0
2 421681 bnd_U A A[2:321681[ 6 PASS SVTYPE=BND;MATEID=bnd_W;EVENT=INV0
2 421682 bnd_X C ]2:321682]C 6 PASS SVTYPE=BND;MATEID=bnd_V;EVENT=INV0
5.4.10 断点位置不确定性
用 CIPOS 表示位置置信区间:
2 321681 bnd_V T T[13:123462[ 6 PASS SVTYPE=BND;MATEID=bnd_U;CIPOS=0,6
13 123456 bnd_U A A]2:321687] 6 PASS SVTYPE=BND;MATEID=bnd_V;CIPOS=0,6
注意:ALT 中的 mate 坐标是假设当前 breakend 位置固定时的坐标,CIPOS 描述不确定性。
5.4.11 单断点
没有 mate 的 breakend 叫单断点:
2 321681 bnd_W G G. 6 PASS SVTYPE=BND
2 321682 bnd_V T ]13:123456]T 6 PASS SVTYPE=BND;MATEID=bnd_U
13 123456 bnd_U C C[2:321682[ 6 PASS SVTYPE=BND;MATEID=bnd_V
13 123457 bnd_X A .A 6 PASS SVTYPE=BND
单断点可用于未观察到的 partner,或拷贝数变化。
5.4.12 样本混合物
癌症样本可能混合正常和肿瘤基因组,用 ##SAMPLE 定义:
##SAMPLE=<ID=Blood,Genomes=Germline,Mixture=1.,Description="Patient germline genome">
##SAMPLE=<ID=TissueSample,Genomes=Germline;Tumor,Mixture=.3,.7,Description="Patient germline genome;Patient tumor genome">
数据行可以按样本报告计数,也可以解卷积后报告拷贝数。
5.4.13 克隆衍生关系
用 ##PEDIGREE 描述肿瘤基因组之间的克隆衍生:
##PEDIGREE=<Derived=PRIMARY-TUMOR-GENOME-ID,Original=GERMLINE-GENOME-ID>
##PEDIGREE=<Derived=SECONDARY1-TUMOR-GENOME-ID,Original=PRIMARY-TUMOR-GENOME-ID>
##PEDIGREE=<Derived=SECONDARY2-TUMOR-GENOME-ID,Original=PRIMARY-TUMOR-GENOME-ID>
5.4.14 非整倍体中的相位邻接(bundles)
在癌症基因组中,一个 breakend 可以有多个单倍型。每个单倍型称为一个 bundle。用 DP、CN、BDP、BCN、HQ 等 FORMAT 子字段描述:
| 子字段 | 含义 |
|---|---|
DP | 片段深度 |
CN | 片段拷贝数 |
BDP | bundle 深度 |
BCN | bundle 拷贝数 |
HQ | 单倍型质量 |
例如:
| Allele | 1 | 1 | 0 |
|---|---|---|---|
| Haplotype | 1 | 2,3,4 | 5 |
| Segment Depth | 5 | 17 | 4 |
| Segment Copy Number | 1 | 3 | 1 |
| Bundle Depth | 4 | 0 | 3 |
| Bundle Copy Number | 1 | 3 | 1 |
| Haplotype quality | 30 | 40 | 40 |
总结
- 5.1–5.2:简单变异用
REF/ALT替换表示。插入/缺失要包含前一个碱基(或位置 1 时后一个碱基)。VCF 不保留碱基对齐的等价性。 - 5.3:结构变异用符号
ALT(如<DEL>、<DUP>)和 INFO 键(SVTYPE、END、SVLEN、IMPRECISE等)描述。 - 5.4:复杂重排用 breakend 表示。每个 breakend 一行,
SVTYPE=BND。ALT用四种方括号语法表示连接方向。支持插入序列、大插入用 contig、多 mate、显式 partner、端粒、事件分组、倒位、位置不确定性、单断点、样本混合物、克隆衍生和单倍型 bundles。
这一节是 VCF 最灵活也最复杂的部分,掌握 REF/ALT 替换逻辑和 breakend 的 ALT 语法,就能读懂绝大多数 VCF 记录。