Bioinformatics VCF 101


🎉 欢迎来到VCF文件101教程! 🎉
想要像生物信息学忍者一样处理基因组数据吗?那么,理解VCF文件(Variant Call Format,变异位点格式)绝对是你的必修课! 🚀 别担心,这篇教程就像是你的VCF速成班,目标是让你在看完后,能够自信地处理日常的VCF文件分析任务。 😎
教程大纲:
VCF文件是啥?为啥重要? 🤔 (用大白话解释VCF的用途)
VCF文件格式解剖 🦴 (像拆骨头一样,把VCF文件结构拆开讲清楚)
Header(头部): 元数据信息,就像文件的“说明书”
Data Body(数据主体): 变异位点信息,才是真正的数据内容
字段逐个击破! 🎯 (详细解释每一列的含义,结合例子,保证你一看就懂)
固定字段:
#CHROM
,POS
,ID
,REF
,ALT
,QUAL
,FILTER
,INFO
可变字段:
FORMAT
,SAMPLEs
(样本列)
VCF文件示例,眼见为实! 🤩 (用一个简单的VCF文件例子,让你把前面学的知识串起来)
VCF文件处理工具箱 🧰 (介绍几个常用的VCF工具,并给出简单示例)
bcftools
vcftools
GATK
(Genome Analysis Toolkit)Python/R库
实战演练!常见VCF分析场景 🚀 (告诉你一些VCF文件在实际分析中怎么用)
总结与进阶 🎓 (回顾重点,指引你更深入学习的方向)
Let's dive in! 🏊♀️
1. VCF文件是啥?为啥重要? 🤔
想象一下,你有一本人类基因组的“蓝图” 📘。 VCF文件就像是这本蓝图上的“勘误表”或者“修订版” 📝。 它记录了在一个或多个个体中,与参考基因组(人类基因组的“标准版本”)不同的地方,也就是基因变异。
为啥重要?
个性化医疗 🩺: 每个人基因组都不一样,VCF文件可以帮助我们了解个体差异,从而实现更精准的疾病诊断和治疗。
遗传病研究 🧬: 找到导致遗传病的基因变异,VCF文件是关键数据来源。
药物研发 💊: 了解基因变异如何影响药物反应,加速新药开发。
群体遗传学 🌍: 研究人群之间的基因差异,了解人类进化和迁徙历史。
动植物育种 🌱/🐶: 改良农作物和家畜品种,提高产量和抗性。
总之,VCF文件是生物信息学分析中非常核心的数据格式,理解它,你就能解锁基因组数据的宝藏! 💎
2. VCF文件格式解剖 🦴
VCF文件是文本文件,你可以用任何文本编辑器打开它(比如Notepad++, Sublime Text, Vim, VS Code等等)。 它的结构主要分为两部分:
Header (头部): 以
##
开头的行,提供关于VCF文件本身的元数据信息,例如:VCF版本
参考基因组版本
变异位点信息的定义 (INFO, FORMAT字段的含义)
样本信息 (如果有的话)
等等...
Header就像是VCF文件的“说明书”,告诉程序如何解析后面的数据。
Data Body (数据主体): 以
#
开头的一行是表头行,定义了每一列的名称。 从第二行开始,每一行代表一个变异位点 (variant) 的信息。 每一列用制表符\t
分隔。
简单来说,VCF文件就像一个表格,Header是表格的“表头说明”,Data Body是表格的“数据内容”。 📊
3. 字段逐个击破! 🎯
我们来详细看看Data Body的每一列,这是VCF文件的核心内容。
表头行 (以 #
开头的那行) 定义了每一列的名称:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT [SAMPLE1] [SAMPLE2] ...
前8列是固定字段 (Fixed Fields),在所有VCF文件中都有,且含义固定。
FORMAT
和SAMPLEs
列是可变字段 (Variable Fields),它们的存在和内容取决于VCF文件的具体情况。
让我们逐个击破! 💪
固定字段 (Fixed Fields):
#CHROM
(Chromosome, 染色体) 🧬含义: 变异位点所在的染色体名称。
示例:
1
,2
,X
,Y
,MT
(线粒体DNA) 或者chr1
,chr2
,chrX
,chrY
,chrM
(取决于参考基因组的命名方式)。重要性: 定位变异在基因组上的位置,后续分析的基础。
POS
(Position, 位置) 📍含义: 变异位点在染色体上的位置 (坐标)。 注意:VCF文件中的位置通常是1-based坐标,也就是说,染色体的第一个碱基位置是1,而不是0。
示例:
12345
,567890
重要性: 与
#CHROM
一起确定变异在基因组上的精确位置。
ID
(Identifier, 标识符) 🏷️含义: 变异位点的唯一标识符。 通常来自数据库,例如dbSNP (NCBI数据库) 或 COSMIC (癌症基因组数据库)。 如果没有已知的ID,通常用
.
表示。示例:
rs123456
,COSM1234567
,.
重要性: 方便链接到已知的变异信息和注释。
rs
开头的ID通常是SNP (单核苷酸多态性) 的dbSNP标识符。
REF
(Reference allele, 参考等位基因) 🧬含义: 参考基因组在该位置的碱基。
示例:
A
,T
,G
,C
,ATGC
(对于插入或缺失变异)。重要性: 作为比较的基准,说明变异是相对于参考基因组的变化。
ALT
(Alternate allele(s), 备选等位基因) 🧬含义: 在该位置的备选等位基因。 如果有多个备选等位基因,用逗号
,
分隔。示例:
G
,C
,A,G
,<DEL>
(缺失),<INS>
(插入),<DUP>
(重复),<INV>
(倒位) 等等。重要性: 定义了变异的具体类型和碱基变化。
REF
和ALT
共同描述了变异。<>
括起来的通常是结构变异的符号表示。
QUAL
(Quality, 质量) 📊含义: 变异位点质量得分。 Phred-scaled 质量值,表示变异位点被正确检出的可能性。 数值越高,质量越好。 通常是基于测序数据和变异检测算法计算出来的。 如果没有质量值,可以用
.
表示。计算方式:
-10 * log10(错误概率)
例如,QUAL=30,表示错误概率为 10-3,即千分之一。示例:
30
,50
,99
,.
重要性: 用于评估变异位点检测的可靠性,通常会设置质量阈值进行过滤。
FILTER
(Filter, 过滤器) 🚦含义: 变异位点是否通过了预设的过滤器。 用于标记质量不佳或可疑的变异位点。
可能的值:
PASS
: 通过所有过滤器,质量良好。一个或多个过滤器名称,用分号
;
分隔: 表示该变异位点未通过这些过滤器。 过滤器名称通常在Header的##FILTER
行中定义。.
: 没有应用任何过滤器。
示例:
PASS
,q10;s50
,.
重要性: 用于筛选高质量的变异位点,减少假阳性结果。
INFO
(Information, 信息) ℹ️含义: 关于变异位点的额外信息,以键值对 (key=value) 的形式存储,用分号
;
分隔。 不同的信息用不同的键 (key) 表示,键的含义在Header的##INFO
行中定义。示例:
AC=2;AF=0.5;DP=100;MQ=55.0
AC=2
: Allele Count (等位基因计数), 备选等位基因在所有样本中的总计数为2。AF=0.5
: Allele Frequency (等位基因频率), 备选等位基因在所有样本中的频率为0.5 (50%)。DP=100
: Depth (深度), 所有样本在该位点的总测序深度为100。MQ=55.0
: Mapping Quality (比对质量), 平均比对质量为55.0。
重要性: 提供变异位点的各种注释和统计信息,用于更深入的分析和解读。 常见的INFO字段包括:
AC
(Allele Count)AF
(Allele Frequency)DP
(Depth)MQ
(Mapping Quality)QD
(Quality by Depth)SOR
(Strand Odds Ratio)FS
(Fisher Strand bias)MQRankSum
(Mapping Quality Rank Sum Test)ReadPosRankSum
(Read Position Rank Sum Test)ANN
(Variant Annotation, 变异注释,通常包含变异对基因、转录本、蛋白等的影响信息,格式比较复杂,需要查阅具体注释工具的文档)等等... 具体有哪些INFO字段,要看VCF文件的Header部分的
##INFO
行定义。
可变字段 (Variable Fields):
FORMAT
(Format, 格式) ⚙️含义: 定义了后面
SAMPLEs
列中每个样本数据的格式。 它是一个格式描述字符串,用冒号:
分隔不同的字段,每个字段对应SAMPLEs
列中的一个数据。FORMAT
字段的含义在Header的##FORMAT
行中定义。示例:
GT:AD:DP:GQ:PL
GT
: Genotype (基因型)AD
: Allelic Depth (等位基因深度), 每个等位基因的测序深度。DP
: Depth (深度), 该样本在该位点的总测序深度。GQ
: Genotype Quality (基因型质量), 基因型质量得分。PL
: Phred-scaled genotype Likelihoods (基因型似然值)。
重要性: 定义了样本数据的结构和内容,是解读样本数据的关键。 常见的FORMAT字段包括:
GT
(Genotype)AD
(Allelic Depth)DP
(Depth)GQ
(Genotype Quality)PL
(Phred-scaled genotype Likelihoods)PGT
(Phasotype Genotype)PID
(Phase Set ID)等等... 具体有哪些FORMAT字段,要看VCF文件的Header部分的
##FORMAT
行定义。
[SAMPLE1]
,[SAMPLE2]
, ... (样本列) 👨👩👧👦含义: 每个样本在该变异位点的数据。 列名就是样本的ID。 每个样本的数据格式由
FORMAT
列定义,用冒号:
分隔,顺序与FORMAT
列中的字段顺序一致。示例 (假设 FORMAT 列为
GT:AD:DP:GQ:PL
):样本
SAMPLE1
的数据可能是:0/1:12,8:20:99:10,0,100
GT=0/1
: 基因型,0/1
表示杂合子,携带一个参考等位基因 (0) 和一个备选等位基因 (1)。0/0
是纯合参考基因型,1/1
是纯合备选基因型。|
表示 phased (单倍型已知),/
表示 unphased (单倍型未知)。AD=12,8
: 等位基因深度,参考等位基因深度为12,备选等位基因深度为8。DP=20
: 总深度为20。GQ=99
: 基因型质量得分为99。PL=10,0,100
: 基因型似然值,分别对应0/0
,0/1
,1/1
三种基因型的似然值 (Phred-scaled)。
样本
SAMPLE2
的数据可能是:0/0:25,0:25:90:0,90,1000
重要性: 提供了每个样本在该变异位点的具体基因型和相关数据,是进行下游分析 (例如,家系分析、病例对照研究) 的基础。
总结一下,Data Body的每一行 (除了表头行) 代表一个变异位点,每一列提供关于这个变异位点的不同信息,固定字段是通用的基本信息,可变字段提供样本特异的信息和更详细的变异描述。 🤯
4. VCF文件示例,眼见为实! 🤩
让我们看一个简单的VCF文件示例:
##fileformat=VCFv4.2
##fileDate=20231027
##reference=GRCh38
##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency">
##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
##FILTER=<ID=q10,Description="Quality below 10">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##FORMAT=<ID=AD,Number=R,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth at this position for each sample">
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE1 SAMPLE2
1 100 rs123 A G 50 PASS AC=2;AF=0.5;DP=20 GT:AD:DP 0/1:10,10:20 0/1:10,10:20
1 200 . C T,G 30 q10 AC=1,1;AF=0.25,0.25;DP=30 GT:AD:DP 0/0:20,0:20 0/1:10,5:15
2 300 rs456 G A 99 PASS AC=4;AF=1.0;DP=50 GT:AD:DP 1/1:0,20:20 1/1:0,30:30
解释:
Header部分:
##fileformat=VCFv4.2
: VCF文件版本是 4.2。##fileDate=20231027
: 文件生成日期是 2023年10月27日。##reference=GRCh38
: 参考基因组版本是 GRCh38。##INFO=...
: 定义了INFO
字段中AC
,AF
,DP
的含义。##FILTER=...
: 定义了过滤器q10
的含义 (质量低于10)。##FORMAT=...
: 定义了FORMAT
字段中GT
,AD
,DP
的含义。
Data Body部分:
表头行:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE1 SAMPLE2
第一行数据:
1 100 rs123 A G 50 PASS AC=2;AF=0.5;DP=20 GT:AD:DP 0/1:10,10:20 0/1:10,10:20
染色体:
1
,位置:100
, ID:rs123
, 参考碱基:A
, 备选碱基:G
, 质量:50
, 过滤器:PASS
, INFO:AC=2;AF=0.5;DP=20
, FORMAT:GT:AD:DP
,SAMPLE1
数据:0/1:10,10:20
,SAMPLE2
数据:0/1:10,10:20
。含义: 在染色体1的位置100,有一个SNP变异 (A -> G), dbSNP ID是 rs123, 质量为50, 通过了所有过滤器。 在两个样本 (SAMPLE1, SAMPLE2) 中都是杂合子 (0/1), 且参考等位基因和备选等位基因的测序深度都是10。
第二行数据:
1 200 . C T,G 30 q10 AC=1,1;AF=0.25,0.25;DP=30 GT:AD:DP 0/0:20,0:20 0/1:10,5:15
染色体:
1
,位置:200
, ID:.
(未知ID), 参考碱基:C
, 备选碱基:T,G
(多个备选等位基因), 质量:30
, 过滤器:q10
(未通过q10过滤器), INFO:AC=1,1;AF=0.25,0.25;DP=30
, FORMAT:GT:AD:DP
,SAMPLE1
数据:0/0:20,0:20
,SAMPLE2
数据:0/1:10,5:15
。含义: 在染色体1的位置200,有两个备选SNP变异 (C -> T 和 C -> G), 没有dbSNP ID, 质量为30, 未通过q10过滤器。 样本 SAMPLE1 是纯合参考基因型 (0/0), 样本 SAMPLE2 是杂合子 (0/1,这里指 C -> T 变异,因为在ALT列中 T 排在前面)。
第三行数据:
2 300 rs456 G A 99 PASS AC=4;AF=1.0;DP=50 GT:AD:DP 1/1:0,20:20 1/1:0,30:30
染色体:
2
,位置:300
, ID:rs456
, 参考碱基:G
, 备选碱基:A
, 质量:99
, 过滤器:PASS
, INFO:AC=4;AF=1.0;DP=50
, FORMAT:GT:AD:DP
,SAMPLE1
数据:1/1:0,20:20
,SAMPLE2
数据:1/1:0,30:30
。含义: 在染色体2的位置300,有一个SNP变异 (G -> A), dbSNP ID是 rs456, 质量为99, 通过了所有过滤器。 在两个样本 (SAMPLE1, SAMPLE2) 中都是纯合备选基因型 (1/1)。
通过这个例子,你应该对VCF文件的结构和字段含义有了更直观的理解! 🤓
5. VCF文件处理工具箱 🧰
处理VCF文件,我们需要一些强大的工具。 这里介绍几个常用的命令行工具和编程库:
bcftools
🧰: 瑞士军刀级别的VCF/BCF (VCF的二进制格式) 工具集。 功能强大,速度快。 常用功能:查看 VCF 文件:
bcftools view input.vcf.gz
(支持压缩的VCF文件)过滤变异位点:
bcftools filter -e 'QUAL<30 || DP<10' input.vcf.gz -o filtered.vcf.gz -O z
(过滤掉质量低于30或深度低于10的变异位点,输出压缩VCF)索引 VCF 文件:
bcftools index input.vcf.gz
(为了快速随机访问VCF文件,需要先建立索引,通常用于大型VCF文件)合并 VCF 文件:
bcftools merge input1.vcf.gz input2.vcf.gz -o merged.vcf.gz -O z
(合并多个VCF文件)统计 VCF 文件信息:
bcftools stats input.vcf.gz -o stats.txt
(生成VCF文件的统计报告)更多功能: 变异位点格式转换, 基因型操作, 群体遗传学分析 等等...
vcftools
🧰: 另一个流行的VCF处理工具集。 功能也很丰富,侧重于过滤和统计。 常用功能:过滤变异位点:
vcftools --vcf input.vcf --minQ 30 --minDP 10 --recode --recode-INFO-all --out filtered
(过滤掉质量低于30或深度低于10的变异位点,输出新的VCF文件filtered.recode.vcf
)统计变异位点信息:
vcftools --vcf input.vcf --site-quality --site-depth --out site_stats
(生成位点质量和深度统计文件)转换为其他格式:
vcftools --vcf input.vcf --plink --out plink_format
(转换为 PLINK 格式,用于群体遗传学分析)更多功能: 计算 allele frequency, 过滤样本, 提取特定区域的变异位点 等等...
GATK (Genome Analysis Toolkit)
🧰: 一套强大的基因组分析工具包,由 Broad Institute 开发。 虽然主要用于变异检测流程,但也包含一些 VCF 文件操作工具,例如:VariantFiltration (变异位点过滤):
gatk VariantFiltration -V input.vcf.gz -filter "QD < 2.0 || MQ < 40.0 || FS > 60.0 || SOR > 3.0 || MQRankSum < -12.5 || ReadPosRankSum < -8.0" -filter-name "VQSR_FAILED" -O filtered.vcf.gz
(使用 GATK 推荐的硬过滤标准过滤变异位点)SelectVariants (选择变异位点):
gatk SelectVariants -V input.vcf.gz -select-type SNP -O snps_only.vcf.gz
(选择 SNP 变异,输出 SNP VCF 文件)更多 GATK 工具: VariantManipulation 工具组中有更多 VCF 操作工具。
Python/R 库 🐍/📊: 如果你喜欢编程,可以使用 Python 或 R 的库来处理 VCF 文件。
Python:
PyVCF
: 用于读取、写入和操作 VCF 文件的 Python 库。cyvcf2
: 更快速的 VCF 解析库 (C 语言实现)。
R:
vcfR
: 用于读取和处理 VCF 文件的 R 包。VariantAnnotation
: Bioconductor 包,用于变异注释和分析。
示例: 使用 bcftools
过滤 VCF 文件
假设你有一个名为 variants.vcf.gz
的VCF文件,你想过滤掉质量值 (QUAL) 低于 30 的变异位点,并保存为新的 VCF 文件 filtered_variants.vcf.gz
。
命令:
bcftools filter -e 'QUAL<30' variants.vcf.gz -o filtered_variants.vcf.gz -O z
解释:
bcftools filter
: 运行bcftools
的filter
子命令,用于过滤变异位点。-e 'QUAL<30'
:-e
参数指定过滤表达式,'QUAL<30'
表示保留质量值大于等于 30 的变异位点 (表达式为真则保留,为假则过滤掉)。variants.vcf.gz
: 输入 VCF 文件。-o filtered_variants.vcf.gz
:-o
参数指定输出文件名,filtered_variants.vcf.gz
是过滤后的 VCF 文件名。-O z
:-O
参数指定输出文件格式,z
表示 bgzip 压缩的 VCF 文件 (.vcf.gz
后缀)。
运行这个命令后,你就会得到一个过滤后的 VCF 文件 filtered_variants.vcf.gz
,其中只包含质量值大于等于 30 的变异位点。 🎉
6. 实战演练!常见VCF分析场景 🚀
了解了VCF格式和工具,我们来看看一些常见的VCF分析场景:
变异位点过滤 (Variant Filtering): 这是最基本的操作。 根据质量值 (QUAL), 深度 (DP), 基因型质量 (GQ), 过滤器状态 (FILTER), INFO字段信息 (例如 allele frequency) 等条件,筛选高质量的变异位点,去除假阳性结果。 常用工具:
bcftools filter
,vcftools
的过滤选项,GATK VariantFiltration
。变异位点注释 (Variant Annotation): 将变异位点与已知的基因、功能区域、疾病关联等信息关联起来。 常用的注释工具包括
VEP (Variant Effect Predictor)
,ANNOVAR
,SnpEff
等。 注释信息通常会添加到 VCF 文件的 INFO 列中 (或者生成新的注释文件)。变异位点格式转换 (VCF Conversion): 将 VCF 文件转换为其他格式,例如 PLINK 格式 (用于群体遗传学分析), BED 格式 (用于基因组区域操作) 等。 常用工具:
vcftools
, 编程库。VCF 文件合并 (VCF Merging): 将多个 VCF 文件合并成一个文件,例如合并不同样本的 VCF 文件,或者合并不同变异检测流程生成的 VCF 文件。 常用工具:
bcftools merge
,GATK MergeVcfs
.VCF 文件子集提取 (VCF Subsetting): 提取 VCF 文件的子集,例如提取特定染色体或基因区域的变异位点, 提取特定类型的变异 (SNP, Indel) , 提取特定样本的变异信息。 常用工具:
bcftools view
,vcftools
的区域/样本选择选项,GATK SelectVariants
.群体遗传学分析 (Population Genetics Analysis): 基于 VCF 文件进行群体遗传学分析,例如计算 allele frequency, FST, PCA, LD (linkage disequilibrium) 等。 常用工具:
vcftools
,PLINK
,EIGENSOFT
,ADMIXTURE
,ANGSD
等。关联分析 (Association Analysis): 将 VCF 文件中的基因变异与表型数据 (例如疾病状态, 药物反应) 进行关联分析,寻找与表型相关的基因变异。 常用工具:
PLINK
,GCTA
, R 包 (例如qqman
,gapit
)。
这些只是一些常见的应用场景,VCF 文件的应用非常广泛,几乎涉及到所有基因组学相关的研究领域。 🚀
7. 总结与进阶 🎓
恭喜你! 🎉 你已经完成了VCF文件101教程的学习! 现在你应该对VCF文件的格式、字段含义、常用工具和基本应用场景有了全面的了解。 你已经迈出了成为生物信息学忍者的第一步! 🥷
回顾一下重点:
VCF文件是记录基因变异信息的标准文本格式。
VCF文件由 Header 和 Data Body 两部分组成。
Data Body 的每一行代表一个变异位点,包含固定字段 (CHROM, POS, ID, REF, ALT, QUAL, FILTER, INFO) 和可变字段 (FORMAT, SAMPLEs)。
理解每个字段的含义是解读 VCF 文件的关键。
bcftools
,vcftools
,GATK
是常用的 VCF 文件处理工具。VCF 文件广泛应用于个性化医疗、遗传病研究、药物研发、群体遗传学等领域。
进阶学习方向:
深入了解 VCF 格式规范: 阅读 VCF 格式规范文档 (官方文档或维基百科)。
学习更多 VCF 工具和高级用法: 深入学习
bcftools
,vcftools
,GATK
的各种功能和参数。掌握编程处理 VCF 文件: 学习使用 Python 或 R 库 (例如
PyVCF
,vcfR
) 编程处理 VCF 文件,实现更灵活的分析流程。学习变异注释和数据库: 了解常用的变异注释工具 (VEP, ANNOVAR, SnpEff) 和数据库 (dbSNP, ClinVar, COSMIC) ,以及如何利用注释信息进行生物学解读。
实践!实践!再实践!: 下载一些公开的 VCF 文件 (例如 1000 Genomes Project, gnomAD),使用工具进行练习,解决实际问题。
生物信息学的世界广阔而精彩,VCF 文件只是冰山一角。 继续探索,不断学习,你会在基因组数据的海洋中发现更多宝藏! 🌊
祝你学习愉快!Happy VCF-ing! 😄
Subscribe to my newsletter
Read articles from Lewis Lovelock directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Lewis Lovelock
Lewis Lovelock
I am a developer working in BGI located in Shenzhen. I am familiar with genomics 🧬 and coding. I love 🏀 👩🏻💻 and Hiphop🎵