ANI概念
Average Nucleotide Identity (ANI) 是在核酸水平,两两基因组之间所有直系同源蛋白编码基因的相似性,常用于研究基因组之间的进化距离。相较于传统的 DNA-DNA hybridization (DDH),ANI指标计算简单省时。且ANI指标有助于构建结构性数据库,方便生物信息学者的后续研究。还有一种计算ANI的方法是基于俩俩基因组的共同同源蛋白编码基因的相似性。接下来介绍几款计算ANI的在线工具和本地软件(Jspecies 和 pyani)。
ANI在线工具
Kostas lab:http://enve-omics.ce.gatech.edu/ani/index
MicrobeTrakr 的 ANI Calculator:http://www.microbetrakr.org/ani/
Ezbiocloud:http://www.ezbiocloud.net/tools/ani
ANI本地软件
Jspecies
http://imedea.uib-csic.es/jspecies/ DOI: 10.1073/pnas.0906412106
Jspecies是可视化操作,用户体验简单。但输入基因组相对麻烦,不方便较多基因组之间的两两计算ANI。
Jspecies安装
# install blast mkdir blast cd blast wget http://mirrors.vbi.vt.edu/mirrors/ftp.ncbi.nih.gov/blast/executables/legacy/2.2.26/blast-2.2.26-universal-macosx.tar.gz tar zxvf blast-2.2.26-universal-macosx.tar.gz -C /opt/biosoft # blast path: /opt/biosoft/blast-2.2.26/bin/blastall # formatdb path: /opt/biosoft/blast-2.2.26/bin/formatdb # fastacmd path: /opt/biosoft/blast-2.2.26/bin/fastacmd cd .. # install MUMmer mkdir MUMmer cd MUMmer wget https://sourceforge.net/projects/mummer/files/mummer/3.23/MUMmer3.23.tar.gz tar zxvf MUMmer3.23.tar.gz -C /opt/biosoft cd /opt/biosoft/MUMmer3.23 make check make install # nucmer path: /opt/biosoft/MUMmer3.23/nucmer # install Jspecies mkdir /opt/biosoft/jspecies cd /opt/biosoft/jspecies wget http://imedea.uib-csic.es/jspecies/jars/jspecies1.2.1.jar java -jar -Xms1024m -Xmx1024m jspecies1.2.jar
Jspecies运行
- 打开软件图形界面后,点击 Edit 下的 preferences,添加 blast、nucmer、formatdb、fastacmd路径;
- 设置 ANIb (基于blast得到的ANI值)
-X 空比对对应的下降值 [默认 150] -q 碱基错配罚分 [默认 -1] -F 是否过滤query序列的简单重复和低复杂度序列 [F] -e e-value [默认 1e-15] -a 运行线程数 [默认 2] Identity (%) >= 30 Alignment (%) >= 70 #more than 30% overall sequence identity (recalculated to an identity along the entire sequence) over an alignable region of at least 70% of their length length 1020 #query序列被连续切割成1020bp的片段,然后将这些片段blastn比对到reference序列,比对的结果用于后续计算
- ANIm (基于MUMmer得到的ANI值)参数
-b 低得分区大于此值时,停止比对 [默认 200] -c 一簇匹配的序列最少需要有大于此长度的匹配。此值越大,则小的匹配越少 [默认 65] -g 在一簇匹配的序列中,两个邻近的matches之间的gap的最大阈值。此值越大,则越容易找到更大匹配区 [默认 90] -l single match的最小长度 [默认 20]
- 导入数据并运行:File -> New File -> Import FASTA(S) from files -> 选择 Tetra、ANIb、ANIm -> Start
ANI命令行软件
pyani
pyani是用于计算ANI的python3模块,其依赖包有numpy、scipy、matplotlib、biopython、pandas、seaborn。0.1.3.2及以上版本的其他依赖包不用另外安装,0.1.3.2以下版本 pip install -r requirements.txt 安装依赖包。pyani 包括average_nucleotide_identity.py (计算ANI) 和 genbank_get_genomes_by_taxon.py (从NCBI下载数据),并提供四种不同算法:
- ANIm:使用 MUMmer (NUCmer) 比对序列
- ANIb:使用 BLASTN+ to 比对序列的 1020nt 片段
- ANIblastall:使用老版的 BLASTN 比对序列的 1020nt 片段
- TETRA:计算每个序列的四核苷酸的频率
pyani安装
# pip3 install pip3 install pyani echo "PATH=/home/linuxbrew/.linuxbrew/bin:$PATH" >> ~/.bashrc source ~/.bashrc # local install git clone git@github.com:widdowquinn/pyani.git cd pyani python3 setup.py install
pyani运行
# example average_nucleotide_identity.py -i tests/test_ani_data/ -o tests/test_ANIm_output -m ANIm -g average_nucleotide_identity.py -i tests/test_ani_data/ -o tests/test_ANIb_output -m ANIb -g average_nucleotide_identity.py -i tests/test_ani_data/ -o tests/test_ANIblastall_output -m ANIblastall -g average_nucleotide_identity.py -i tests/test_ani_data/ -o tests/test_TETRA_output -m TETRA -g
pyani参数
# required -i INDIRNAME, --indir INDIRNAME 输入文件所在目录 -o OUTDIRNAME, --outdir OUTDIRNAME 输出结果目录 # optional -v, --verbose 输出详细结果 -f, --force 强制文件的写入 -s FRAGSIZE, --fragsize FRAGSIZE ANIb比对时序列的片段大小 [默认 1020] -l LOGFILE, --logfile LOGFILE 输出日志文件 --skip_nucmer 跳过运行NUCmer --skip_blastn 跳过运行BLASTN --noclobber 不重做已存在文件 --nocompress 不压缩或删除比较结果 -g, --graphics 生成ANI的热图 --gformat GFORMAT 图形文件输出格式 [pdf|png|jpg|svg] [默认 pdf,png,eps] --gmethod {mpl,seaborn} 图形输出方法 [默认 mpl] --labels LABELS 序列标记文件的路径 --classes CLASSES 序列分类文件的路径 -m {ANIm,ANIb,ANIblastall,TETRA}, --method {ANIm,ANIb,ANIblastall,TETRA} ANI比对方法 [默认 ANIm] --scheduler {multiprocessing,SGE} Job scheduler [默认 multiprocessing] --workers WORKERS 运行线程数 [默认 全部线程] --SGEgroupsize SGEGROUPSIZE SGE组中job数 [默认 10000] --SGEargs SGEARGS Additional arguments for qsub --maxmatch Override MUMmer to allow all NUCmer matches --nucmer_exe NUCMER_EXE NUCmer 程序路径 --filter_exe FILTER_EXE delta-filter 程序路径 --blastn_exe BLASTN_EXE BLASTN+ 程序路径 --makeblastdb_exe MAKEBLASTDB_EXE BLAST+ makeblastdb 程序路径 --blastall_exe BLASTALL_EXE BLASTALL 程序路径 --formatdb_exe FORMATDB_EXE BLAST formatdb 程序路径 --write_excel 输出Excel格式文件 --rerender Rerender graphics output without recalculation --subsample SUBSAMPLE Subsample a percentage [0-1] or specific number (1-n) of input sequences --seed SEED Set random seed for reproducible subsampling. --jobprefix JOBPREFIX Prefix for SGE jobs (default ANI).
pyani自带绘图,若不满意,可以调用ggplot2绘制热图
Rscript heatmap_ANI.R $OUTPUT/ANIb_percentage_identity.tab
#!/usr/bin/env Rscript library("ggplot2") library("reshape") userprefs <- commandArgs(trailingOnly = TRUE) file_name <- userprefs[1] # read file data.ANI <- read.table(file_name) # cluster and order matrix row.order <- hclust(dist(data.ANI))$order # clustering col.order <- hclust(dist(t(data.ANI)))$order dat_new <- data.ANI[row.order, col.order] # re-order matrix accoring to clustering # melt to dataframe df_molten_dat <- melt(as.matrix(dat_new)) # reshape into dataframe names(df_molten_dat)[c(1:3)] <- c("shewanella1", "shewanella2", "ANI") # make plot p1 <- ggplot(data = df_molten_dat, aes(x = shewanella1, y = shewanella2, fill = ANI)) + geom_raster() + scale_fill_distiller(palette = "RdYlBu", limits=c(0.8, 1)) + theme(axis.text.x = element_text(angle = 90, hjust = 1)) + ggtitle("Shewanella ANI heatmap")+ geom_text(aes(label = round(ANI, 2)))+ theme(axis.title=element_text(size=16), strip.text.x=element_text(size=16), legend.title=element_text(size=15), legend.text=element_text(size=14), axis.text = element_text(size=14), title=element_text(size=20), strip.background=element_rect(fill=adjustcolor("lightgray",0.2)) ) # export plot png("Heatmap_ANI_highres.png", width=15, height=15, units="in", pointsize=12, res=500) p1 dev.off()
示例图效果
24种不同 shewanella 属菌种ANI比较热图
参考:
http://imedea.uib-csic.es/jspecies/
https://github.com/widdowquinn/pyani/
http://www.a-site.cn/article/300418.html
https://github.com/rprops/MetaG_lakeMI/wiki/
1F
写得好棒👍