使用eggNOG数据库进行基因功能注释

  • A+
所属分类:Bioinformatics

1. EggNOG数据库简介

eggNOG ( Evolutionary Genealogy of Genes: Non-supervised Orthologous Groups) 公共数据库V5.0版本搜集了5090个生物(477真核生物、4445个代表性细菌和168古菌)和2502个病毒的全基因组蛋白序列。将这些物种分成了379类(taxonomic levels),每类的编号以NCBI的分类编号表示,例如fungi的编号4751。对各个类别物种的全基因组蛋白序列进行同源基因分类,总共得到4.4M个同源基因类(orthologous groups / OGs)。对每个同源基因类进行了多序列比对、系统发育树构建、HMM文件构建和功能注释。

eggNOG数据库是NCBI的COG数据库的扩展,它收集了更全面的物种和更大量的蛋白序列数据。同样进行了同源基因聚类分析和对每个同源基因类的描述和功能分类。eggNOG更强大的功能在于:

1. 对更全面的物种和更大量蛋白序列进行分类。相比于COG数据库纯人工且较为准确的分类,eggNOG数据库扩大物种和序列数据量,采用了非监督聚类方法进行计算。
2. 对每个同源基因类进行了系统发育树构建、HMM模型构建、GO注释、KEGG Pathway注释、SMART/FPAM结构域注释、CAZyme注释等。
3. 提供了本地化软件和网页工具进行eggNOG注释。

eggNOG数据库的对379类物种,每类物种都生成其数据库文件:

0. e5.proteomes.faa文件:收集所有物种的全基因组蛋白序列文件。一个总的数据库文件。

1. members文件:记录OG编号及对应的蛋白序列登录号。编写程序可以从0号文件中提取目标类的蛋白序列数据。
2. annotations文件:记录OG编号的描述信息及所属大类信息。
3. hmms文件:已经构建好的hmm数据库文件。

4. raw_algs文件:多序列比对文件
5. trimmed_algs文件:截短后的多序列比对文件
6. tress文件:统发育树文件。
7. stats文件:统计同源基因类的个数。

2. 使用网页工具进行eggNOG注释

目前(20190414),eggNOG虽然提供了第5版数据信息的下载,但是网页工具仅提供4.5.1版本的分析。网页工具支持DIAMOND和HMMER两种算法进行eggNOG注释。虽然HMMER方法一般准确性更高,但仅支持单次提交不超过5000条序列的FASTA文件。

推荐使用网页工具进行eggNOG注释,简单方便,结果认可度高。以下情况推荐使用
官方提供的软件eggnog-mapper进行本地化注释:

(1)注释的数据量过大,比如宏基因组数据;
(2)使用更准确的HMMER算法一次性注释超过5000条序列;
(3)想更快地进行eggNOG注释;
(4)网络条件较差。

3. 下载并安装eggnog-mapper软件和数据库文件

安装eggnog-mapper软件:

$ wget https://github.com/eggnogdb/eggnog-mapper/archive/1.0.3.tar.gz -O ~/software/eggnog-mapper-1.0.3.tar.gz
$ tar zxf ~/software/eggnog-mapper-1.0.3.tar.gz -C /opt/biosoft/
$ cd /opt/biosoft/eggnog-mapper-1.0.3
$ python setup.py install
$ echo 'PATH=$PATH:/opt/biosoft/eggnog-mapper-1.0.3' >> ~/.bashrc
$ source ~/.bashrc
$ download_eggnog_data.py euk bact arch viruses
    下载eggNOG v4.5版本的数据库文件eggnog.db和eggnog_proteins.dmnd,并额外下载指定的HMM数据库。可以根据需要选择指定的数据库即可,下载多个数据库消耗更大的磁盘空间:比如euk消耗76G磁盘空间、bact消耗26G磁盘空间、arch消耗7G磁盘空间、viruses消耗468M磁盘空间。

在eggnog-mapper软件安装目录下的data文件夹下存放有数据库文件:

eggnog_proteins.dmnd    所有蛋白序列的DIMOND数据库,用于DIMOND快速序列比对
eggnog.db    功能注释数据库,用于根据比对结果进行功能注释
hmmdb_levels/    存放有各个物种类别的HMM数据库
OG_fasta/    存放各个物种类别的蛋白序列数据库。

4. 使用eggnog-mapper软件进行eggNOG注释

eggnog-mapper软件运行的原理:(1)程序调用HMMER算法将query序列比对到HMM数据库,得到匹配上的OGs结果。然后将query序列和最优OG中的所有蛋白序列进行比对,得到最优匹配序列(seed ortholog)结果。(2)也可以选择DIAMOND算法将query序列比对到蛋白序列数据库,得到比对结果,选择最优的比对结果作为seed ortholog。(3)基于eggNOG数据库中的对应OG的系统发育树,根据seed ortholog能得到详细的同源基因进化关系,从而剔除亲缘关系较远的直系同源基因,甚至可以剔除一对多的同源基因而仅保留一对一的直系同源基因,将最准确的同源基因的功能注释结果转移给query序列,从而对query序列进行功能注释。

使用HMMER算法进行eggNOG注释:

使用eggnog-mapper软件,推荐使用软件自带的HMMER和DIAMOND程序。我使用最新版本的HMMER软件,出现错误提示:“truct.error: unpack requires a string argument of length ”并得不到结果。
$ export PATH=/opt/biosoft/eggnog-mapper-1.0.3/bin/:$PATH

由于eggNOG数据库较大,推荐将数据库放到内存中,以加快程序运行速度。需要注意的是euk数据比较大,比较费内存,占用了约100G内存左右。
$ emapper.py -d euk -i proteins.fasta -o eggNOG_hmmer --cpu 80 --usemem --no_file_comments

若有多组数据需要进行eggNOG注释,可以分两步运行。先将数据库放到内存中,再分别对多组数据进行运算,这样只读取一次数据库到内存中节约运算时间。
$ emapper.py -d euk --cpu 80 --servermode
待数据库加载完毕后,可以在其它终端中执行数据分析。
$ emapper.py -d euk:localhost:51400 -i proteins1.fasta -o eggNOG1 --no_file_comments
$ emapper.py -d euk:localhost:51400 -i proteins2.fasta -o eggNOG2 --no_file_comments

使用DIAMOND算法 进行eggNOG注释 :

$ python emapper.py -m diamond -i proteins.fasta -o eggNOG_diamond --cpu 80 --no_file_comments

分两步运行DIAMOND比对和功能注释。自己手动运行DIAMOND,设置一些性能参数和严格阈值能更有效率。
$ diamond blastp --db /opt/biosoft/eggnog-mapper-1.0.3/data/eggnog_proteins --query proteins.fasta --out eggNOG.tab --outfmt 6 --sensitive --max-target-seqs 20 --evalue 1e-5 --id 30 --block-size 20.0 --tmpdir /dev/shm --index-chunks 1
$ parsing_blast_result.pl -type tab --max-hit-num 1 --db-query proteins.fasta --db-subject /opt/biosoft/eggnog-mapper-1.0.3/eggNOG_Database_5.0/eggnog_proteins.fasta --HSP-num 1 eggNOG.tab | cut -f 1,2,11,12 > eggNOG.emapper.seed_orthologs
$ perl -e '<>; while (<>) { print; }' eggNOG.emapper.seed_orthologs > aa; mv aa eggNOG.emapper.seed_orthologs
$ emapper.py --annotate_hits_table eggNOG.emapper.seed_orthologs -o eggNOG

emapper.py程序常用参数:

输入参数:
-h | --help
    打印帮助信息。
-d | --database <string>
    输入使用的数据库名称。一般选择euk,bact,arch。或输入本地计算机上的HMM数据库路径。
-i <string>
    输入query序列FASTA文件。
--translate
    添加该参数,认为输入的FASTA文件是核酸序列,程序能将核酸序列转换为氨基酸序列后用于比对和注释。
--annotate_hits_table <string>
    输入seed ortholog比对信息。该文件分四列:queryID、subjectID、evalue和bit score。输入该信息,则不需要使用-i参数输入fasta文件了,程序直接运行最后一步功能注释。
--data_dir <string>
    输入eggNOG数据库文件所在的路径。

输出参数:
--output_dir <string>    default: ./
    设置输出文件夹。
-o | --out <string>
    设置输出文件前缀。
--resume
    添加该参数来继续运行程序。
--override
    添加该参数覆盖已有的结果文件。
--no_search
    不进行HMM比对,使用已有的HMM比对结果。默认情况下,程序使用HMMER算法运行分三步:HMM比对、找seed ortholog和功能注释。
--no_refine
    不利用HMM的比对结果进行序列比对寻找seed ortholog,而结束程序,仅仅报告HMM比对结果。
--no_annot
    不进行功能注释,仅报告HMM和seed ortholog的比对结果。
--temp_dir <string>    default: ./
    设置临时文件夹路径。
--no_file_comments
    添加该参数,在输出结果中不输出注释行信息。推荐添加该参数,程序有BUG容易导致seed_ortholog文件中含有#的注释行出现在结果中部,导致程序运行失败。
--keep_mapping_files
    添加该参数,不删除中间文件中的HMMER或DIAMOND比对结果文件。
--report_orthologs
    将用于功能注释的ortholog信息输出到一个单独的文件中。

比对参数:
-m <string>    default: hmmer
    设置比对算法。可以选择的值为hmmer和diamond。
--hmm_maxhits <int>    default: 1
    设置HMMER算法得到的hit结果数量。
--hmm_evalue <float>    default: 0.001
    设置HMMER算法的evalue阈值。
--hmm_score <int>    default: 20
    设置HMMER算法的score阈值。
--hmm_maxseqlen <int>    default: 5000
    忽略长度超过此阈值的query序列。
--hmm_qcov <float>    default: disabled
    设置HMMER算法中query序列的最小覆盖率阈值。
--dmnd_db <string>
    当使用DIAMOND算法时,设置DIAMOND数据库路径。
--matrix <string>    default: BLOSUM62
    设置DIAMOND算法的计分举证。
--gapopen <int>
    设置DIAMOND算法中打开Gap罚分值。
--gapextend <int>
    设置DIAMOND算法中延长Gap罚分值。
--seed_ortholog_evalue <float>    default: 0.001
    进行seed ortholog鉴定时,设定的evalue阈值。
--seed_ortholog_score <int>    default: 60
    进行seed ortholog鉴定时,设定的score阈值。 

功能注释参数:
--tax_scope <string>
    仅使用指定物种类下的同源基因进行功能注释。默认设置下是分别对每条query序列进行自动调节。
--target_orthologs <string>
    进行功能注释时,设置选择什么类型的同源基因进行功能注释。可以选择的值有:one2one,many2one,one2many,many2many,all。
--go_evidence <string>
    设置使用什么类型的GO terms进行功能注释。可以设置的值有:experimental,仅使用源自实验证据支持的GO terms;non-electronic,仅使用非电子计算归纳的Go terms。

性能参数:
--cpu <int>
    设置程序使用的CPU线程数。
--usemem
    添加该参数,能将HMM数据库读取到内存中,增加计算性能。在程序运行结束后,释放内存。
--servermode
    添加该参数,会自动添加--usemem参数,将HMM数据库读取到内存中,并一直将HMM数据库维持到内存中,并提供数据库服务,直到强行结束程序。

5. eggNOG结果解读和分类图绘制

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: