1、ANNOVAR 概述:背景、发展史与核心功能

大家好,我是老王。干生物信息这行十几年了,ANNOVAR 是我工具箱里用得最顺手的工具之一。今天咱们聊聊它到底是什么、怎么来的、能做什么。

先问个问题:拿到一份 VCF 文件,里面成千上万个变异位点,你怎么知道哪些是重要的?哪些跟疾病相关?一个一个去 UCSC 查?那不现实。这就是 ANNOVAR 诞生的原因——它帮你把原始变异信息,“翻译”成有生物学意义的注释。

为什么需要 ANNOVAR?

说白了,测序技术只管把碱基序列读出来。但读出来只是第一步。一个位点是同义突变还是错义突变?是否落在已知的致病基因上?在千人基因组数据库里的频率是多少?这些信息,VCF 文件本身不告诉你。

我最早做 RNA-seq 分析时,手动注释过一批位点。那叫一个痛苦。从 UCSC 下载 refGene 表,自己写 Perl 脚本做坐标交集,折腾三天,结果还因为版本不对闹了乌龙。后来用上 ANNOVAR,几句话就搞定了。那个时候我就觉得,这个工具值得好好学。

ANNOVAR 发展简史

ANNOVAR 是 2010 年左右由王凯(Kai Wang)团队开发的。我记得最早用的是 2011 年的版本,功能还不像现在这么全,但已经很惊艳了。

它经历了几个重要阶段:

年份 版本/事件 主要更新
2010 初始发布 支持 refGene、knownGene、ensGene 注释
2013 V2.0 增加 COSMIC、ClinVar 集成
2015 V3.0 支持 exome 靶向区域注释
2018 V4.0 dbNSFP、GWAS catalog 集成
2022 V5.0 增加 gnomAD、1000G 最新版支持

你看,从最初的几个数据库到现在几十个,ANNOVAR 一直在跟着数据更新走。这也是我一直推荐它的原因——数据库与时俱进,注释结果才有参考价值。

核心功能一览

ANNOVAR 能做的事情,我概括成三个层面:

  • 基于基因的注释(Gene-based annotation):告诉你变异落在哪个基因、什么转录本、什么功能区域(外显子、内含子、UTR 等)。还会预测它对氨基酸序列的影响,比如是不是错义突变、无义突变、移码突变。
  • 基于区域的注释(Region-based annotation):把变异跟预先定义好的区域做交集。比如它是否落在已知的保守区域、重复序列区、CpG 岛等。
  • 基于过滤的注释(Filter-based annotation):这个最实用。帮你查变异在公共数据库里的频率,比如 1000 Genomes、gnomAD 中这个位点的等位基因频率。频率太高的一般就是多态性位点,不是致病突变。

嗯,这里要注意:三种注释类型是独立的,你可以只用其中一种,也可以组合使用。我个人的习惯是全上,然后根据结果再做过滤。

我的经验:刚入门的朋友别想着一次性输出全部注释。先跑基因注释看看整体分布,再用频率过滤把明显的中性位点去掉,最后看 ClinVar 或 COSMIC 里的已知致病位点。分步走,效率更高。

一张图看懂 ANNOVAR 的核心逻辑

下面这张图总结了 ANNOVAR 的工作流程。输入是你自己的 VCF/AVinput 文件,输出是带注释的表格。中间核心是数据库选择和注释类型选择。你想想看,整个过程是不是很清晰?

ANNOVAR 核心工作流程 输入文件 VCF / AVinput 注释引擎(annotate_variation.pl) 基因注释 refGene/ensGene 区域注释 cytoband/CpG 过滤注释 gnomAD/1000G 本地数据库(downdb 下载维护) 注释结果 .hg19_multianno.txt 性能关键:尽量用 -protocol 与 -operation 按需组合,避免无意义计算

核心命令行速览

讲再多理论,不如直接看命令。ANNOVAR 最常用的就这么几个:

# 下载数据库(以 hg19 的 refGene 为例)
annotate_variation.pl -downdb -webfrom annovar -buildver hg19 refGene humandb/

# 基因注释
annotate_variation.pl -geneanno -buildver hg19 input.avinput humandb/

# 频率过滤注释
annotate_variation.pl -filter -dbtype 1000g2015aug -buildver hg19 input.avinput humandb/

# 综合注释(一步生成多数据库注释)
table_annovar.pl input.avinput humandb/ -buildver hg19 -out output \
    -protocol refGene,1000g2015aug_all,clinvar_20221231 \
    -operation g,f,f -nastring .

你看到最后这个 table_annovar.pl 了吗?这是我用得最多的。一次注释多个数据库,输出一个合并表格,方便后续筛选。不过要注意 -operation 参数必须跟 -protocol 一一对应,g 代表基因注释,f 代表过滤注释,r 代表区域注释。顺序乱了,结果就全错了。

我曾经踩过的坑:第一次用 table_annovar.pl 时,我写了 -protocol refGene,clinvar,1000g,结果忘记写 -operation g,f,f。程序没报错,但输出的注释表格里 clinvar 列全是点。后来发现 protocol 和 operation 的顺序必须严格对应。切记!

ANNOVAR 的优势到底在哪?

这些年我对比过不少注释工具。VEP 也不错,SnpEff 也用过。但 ANNOVAR 有几个点让我放不下:

  • 数据库本地化:所有数据库自己下载维护,不依赖外部网络。跑大型项目时不用担心服务器断网或数据库下线。
  • 灵活的组合方式:你想注释什么数据库,自己说了算。不像某些工具,内置了固定的数据库列表。
  • 性能出色:百万级位点的注释,几分钟内搞定。我记得有一次给一个全外显子组项目做注释,40 万个位点,跑了不到五分钟。
  • 输出格式友好:表格形式的输出,直接能用 Excel 或 R 打开做后续分析。
  • 社区活跃:遇到问题,论坛里基本能找到答案。数据库更新也很快,ClinVar 几乎每个月都有新版本。

一句话总结:ANNOVAR 就是变异注释界的瑞士军刀。小到单个位点的快速查验,大到几千例的大队列分析,它都能胜任。而且学习曲线不算陡,一两天就能上手。

好,关于背景和概况就先聊到这里。记住这张图、这几条命令,后面的章节我们会一个一个展开,把每个数据库的用法讲透。到时候你会更深刻地感受到,这工具到底有多好用。