第4章:常用VCF注释工具——ANNOVAR、SnpEff、VEP的安装与使用,输出格式对比

拿到了高质量的 VCF 文件,下一步就是给它“贴标签”。说白了,我们要把那些染色体位置和碱基变化,翻译成“这个突变在哪个基因上”、“它改变了什么蛋白质”、“在人群里频率高不高”这些生物信息。

做这件事的工具很多,但最常用的就是三个:ANNOVAR、SnpEff 和 VEP。我做了这么多年项目,这三个工具几乎包揽了我95%以上的注释任务。它们各有脾气,但掌握好了,效率会高很多。

一句话总结它们的分工:
  • ANNOVAR:主打灵活和数据库兼容,像个“万能瑞士军刀”。
  • SnpEff:主打速度和效力预测,像个“专注的短跑运动员”。
  • VEP:主打全面和标准,像个“严谨的百科全书”。

这一章,我就带你把它们挨个装一遍、跑一次、再看输出。你想想看,光看文档很难有天数的,跟着命令行敲一遍才是真本事。

4.1 ANNOVAR:灵活的“老大哥”

ANNOVAR 是我最早接触的工具。它的特点就是“不挑食”——几乎任何数据库,只要你能下载到,它就能帮你注释上去。

4.1.1 安装与配置

ANNOVAR 需要申请才能下载,但流程很简单。去官网填个邮箱,拿到下载链接就行。没有复杂的依赖,就一个 Perl 脚本。

# 下载并解压(假设已经获取到下载链接)
wget http://www.openbioinformatics.org/annovar/download/0wgxR2rIVP/annovar.latest.tar.gz
tar -xzf annovar.latest.tar.gz
cd annovar

# 下载常用的参考数据库(以 hg38 为例)
# 人类基因组注释数据库
./annotate_variation.pl -buildver hg38 -downdb -webfrom annovar refGene humandb/
# 群体频率数据库(如 gnomAD)
./annotate_variation.pl -buildver hg38 -downdb -webfrom annovar gnomad_genome humandb/
经验之谈: 数据库下载是耗时最长的步骤,有时网络问题会导致中断。我建议你一次只下载必要的库,别一股脑全下。gnomAD 那个库很大,得有几十个G,确保硬盘空间够用。

4.1.2 基本使用

# 注释 VCF 文件
perl table_annovar.pl input.vcf humandb/ \
  -buildver hg38 \
  -out myanno \
  -remove \
  -protocol refGene,gnomad_genome \
  -operation g,f \
  -nastring . \
  -vcfinput

解释一下参数:-protocol 指定要用的数据库列表,-operation 告诉工具这些数据库是基因注释(g)还是频率过滤(f)。-nastring . 表示缺失值用点号填充,这样后续处理更统一。

4.2 SnpEff:速度派选手

SnpEff 就是个纯粹的“效果预测”工具。它不在乎人群频率,只关心这个突变对基因和蛋白序列的影响。我在做变异致病性初筛时经常用它,因为它快,而且内置了 HGVS 命名规范。

4.2.1 安装与配置

SnpEff 是 Java 写的,所以需要 Java 环境。安装很简单,下载 jar 包就行。

# 下载 SnpEff
wget https://snpeff.blob.core.windows.net/versions/snpEff_latest_core.zip
unzip snpEff_latest_core.zip
cd snpEff

# 下载人类基因组数据库(以 GRCh38.p13 为例)
java -jar snpEff.jar download -v GRCh38.p13
注意: SnpEff 的数据库下载可能会因为内存不足而失败。我遇到过这种情况,后来给 Java 分配更多内存才解决。建议这样设置:
java -Xmx8g -jar snpEff.jar download -v GRCh38.p13

4.2.2 基本使用

# 注释 VCF 文件
java -Xmx4g -jar snpEff.jar -v GRCh38.p13 input.vcf > output.snpeff.vcf

就是这么简单。输出的 VCF 会在 INFO 字段里加一个 ANN 标签,里面详细记录了变异类型(比如 missense_variant,synonymous_variant)、影响的转录本、蛋白质改变(p.Asp123Glu)等。

4.3 VEP:严谨的百科全书

VEP(Variant Effect Predictor)是 Ensembl 出品,功能最全面。如果你要做大规模分析,或者需要很多详细信息(比如 SIFT、Polyphen 等致病性预测),VEP 是不二之选。

4.3.1 安装与配置

VEP 可以通过 Perl 模块安装,也可以用 Docker。我推荐初学者用 Docker,免去依赖烦恼。

# 使用 Docker 拉取 VEP 镜像
docker pull ensemblorg/ensembl-vep

# 或者使用 Perl 安装(较复杂)
# git clone https://github.com/Ensembl/ensembl-vep.git
# cd ensembl-vep
# perl INSTALL.pl

# 下载缓存数据(以 GRCh38 为例)
docker run -v /data/vep_cache:/data/vep_cache ensemblorg/ensembl-vep \
  perl /opt/vep/src/ensembl-vep/INSTALL.pl \
  -a cf -s homo_sapiens -y GRCh38 -c /data/vep_cache
我的建议: VEP 的缓存数据是必须提前下载的。我第一次用的时候没注意,结果运行时在线查数据库,慢得要命。缓存下载后,把路径设置到环境变量里,以后就省事了。

4.3.2 基本使用

# 注释 VCF 文件(Docker 方式)
docker run -v /data/vep_cache:/data/vep_cache \
  ensemblorg/ensembl-vep \
  perl /opt/vep/src/ensembl-vep/vep \
  --cache --dir_cache /data/vep_cache \
  --input_file input.vcf \
  --output_file output.vep.vcf \
  --vcf \
  --everything

--everything 参数会开启所有可用的注释选项,包括:转录本 ID、变异类型、SIFT 预测、PolyPhen 预测、HGVS 命名、外显子/内含子位置等。

4.4 输出格式对比:三份报告的“读法”

工具装好了,跑完了,关键一步来了——看结果。三个工具的输出格式差别很大。我整理了一个对比表,你一看就明白。

对比维度 ANNOVAR(.variant_function) SnpEff(VCF 中的 ANN 字段) VEP(VCF 中的 CSQ 字段)
字段结构 每行 = 一个变异 + 多个基因关系 一个 ANN 字段包含多个子条目,用逗号分隔 一个 CSQ 字段包含多个子条目,用逗号分隔
数据来源 用户指定数据库(如 refGene, gnomAD) 内置数据库,依赖 SnpEff 自身版本 Ensembl 数据库,依赖 VEP 缓存
注释深度 简单:基因名、位置、突变类型 中等:突变类型、HGVS、效力预测 全面:突变类型、HGVS、SIFT/PolyPhen、保守性、人群频率等
自定义能力 极高:可加任意自定义数据库 低:主要通过参数控制输出 中:可通过插件扩展(如 CADD)
解析难度 低:表格格式,清晰易懂 中:VCF 格式,需要解析 INFO 字段 高:VCF 格式,CSQ 字段内容非常丰富

我举个实际例子。假设一个变异 chr1 100 A G。

  • ANNOVAR 会输出一行:exonic NM_001005484.1:exon2:c.78A>G p.Leu26Leu,告诉你这是一个同义突变。
  • SnpEff 在 VCF 的 INFO 字段里写:ANN=G|synonymous_variant|LOW|...|p.Leu26Leu|...}
  • VEP 在 VCF 的 INFO 字段里写:CSQ=G|synonymous_variant|...,还附带 SIFT 值和 PolyPhen 值。

4.5 选哪个?我的建议

没有一个工具能覆盖所有场景。我一般这样选:

  • 初筛跑全基因组:用 SnpEff,速度快,能快速过滤掉同义突变。
  • 做精细分析或药物基因组学项目:用 ANNOVAR + 自定义数据库(比如药物代谢相关的 PharmGKB 映射)。
  • 写论文或提交公共数据库:用 VEP,因为它最符合 Ensembl 和 ClinVar 的规范,审稿人比较认可。

还有一种常见做法:先用 SnpEff 批量注释,挑出可能有影响的变异,再用 VEP 对这些候选位点做深度注释。这样既省时间又不丢精度。

4.6 本章知识脉络:VCF 注释工具选型流程

为了让你更直观地理解这三个工具在整体流程中的位置,我画了一张图。它展示了从原始 VCF 到最终注释结果的决策路径。

VCF 注释工具选型流程 原始 VCF 文件 选择注释工具(根据需求) ANNOVAR 灵活 + 自定义数据库 SnpEff 速度 + 效力预测 VEP 全面 + 标准规范 .variant_function 表 低解析难度 VCF INFO: ANN 字段 中解析难度 VCF INFO: CSQ 字段 高解析难度 知识图谱整合

4.7 避坑指南

我曾遇到过的问题:
  • 基因名称不一致:同一段区域,ANNOVAR 用 RefSeq 命名(NM_001005484),SnpEff 用 Ensembl 命名(ENST000003...)。在构建知识图谱时,一定要做基因 ID 的对应关系映射,否则节点会重复。
  • 版本不对应:如果你用 hg19 的参考基因组,SnpEff 用 GRCh37,VEP 用 GRCh37,它们虽然对应同一个版本,但内部数据库的转录本编号可能不同。我建议全程统一用 GRCh38/hg38。
  • 并行注释时的 I/O 瓶颈:当你同时对多个 VCF 文件跑注释时,硬盘读写会成为瓶颈。我会临时挂载 RAM Disk 来加快小文件处理。

总结一下这三个工具的定位,你就清楚了:

  • ANNOVAR:适合你手里有独特数据库,或者需要灵活定制输出格式的场景。
  • SnpEff:适合大规模初筛,或者对速度有要求的生产环境。
  • VEP:适合需要详细功能预测,以及符合国际规范的分析。

安装和使用只是第一步。在后续的章节里,我们会把这些注释结果真正地喂给知识图谱,让它们发挥出“关联分析”的威力。