iqtree是一款构建进化树的软件,类似于phyml,raxml。
文章地址:W-IQ-TREE: a fast online phylogenetic tool for maximum likelihood analysis | Nucleic Acids Research | Oxford Academic (oup.com)
官方说这款软件相比于其他构树软件的优势在于:
这款软件有本地版和在线版,在线版网址为IQTREE Web Server: Fast and accurate phylogenetic trees under maximum likelihood (univie.ac.at),这个网址能运行时间不超过24小时的分析。
iqtree软件需要的输入文件是任意比对好的序列文件,氨基酸和核苷酸的比对可以通过mafft、clustalw软件或其他比对软件进行。最简单的的运行iqtree方式是:
iqtree -s example.phy
一般会输出如下的文件:
example.phy.iqtree
example.phy.treefile
c.contree
example.phy.log
example.phy.ckp.gz
example.phy.bionj
example.phy.mldist
example.phy.model.gz.
example.phy.splits.nex
其中iqtree后缀文件可以以文本形式看到输出的树,如:
treefile后缀文件是后续画图或进行选择分析所需要的树文件,这个文件是NEWICK格式的,可以直接输入到paml或者hyphy中。如:(sp3,(sp1,sp2));
在得到前面的输出后,如果还想加参数重新建树,在当前目录下运行一般会报错ERROR: Checkpoint (example.phy.ckp.gz) indicates that a previous run successfully finished
这时候可以通过参数-redo
再重新跑一次,这个参数会丢弃原来所有输出重新进行分析。
如果要设置不同的参数去测试建树的结构,那可能会需要将输出文件改名或放在另一文件夹下。可以使用参数-prefix
进行设置:
iqtree -s example.phy -pre ../example.c1 #放在上级目录中,以example.c1命名输出文件
iqtree一般会根据输入文件自己去测试最佳建树模型,但如果你已经用其他软件去预测过最佳模型,只想用iqtree快速的建个树,可以用-m XXX
进行建树模型的设置。
想要更快的建树,可以设置多线程运行-T
,使用下来-T AUTO
是最方便的,让iqtree根据自身需要去设置相应核数,如果盲目设置过高核数,有时候还会比AUTO
的时间更长,除此之外,如果想节省计算资源,可以通过-cmax
进行设置。如果说不需要用bootstrap自举树结构,那单核速度会更快,AUTO
在序列较长和算bootstrap value的时候更加有效
建树结果的可信度一般用自举值来衡量,也就是bootstrap,可以通过-b
来设置,标准的自举值不小于100,iqtree的一大特色就是其快速自举-bb
,设置值不少于1000,一般来说标准的自举值在80%以上我们认为是可信的,快速自举则要求在95%以上,官方还推荐使用-alrt
进行SH-test,在快速自举>95%及alrt>80时认为结果可靠。
如果在没遇到报错的情况下,个人推荐使用标准自举值建树,但不想耗费太多资源并节约时间可以使用快速自举。
所以对于一般的核苷酸序列建树,可以使用的命令是:
iqtree -s example.phy -T AUTO -b 1000
或
iqtree -s example.phy -T AUTO -bb 1000 -alrt 1000
如果需要用密码子模型或氨基酸模型建树:
iqtree -s example.phy -T AUTO -b 1000 -st CODON #服从标准密码子分布
iqtree -s example.phy -T AUTO -b 1000 -st CODON5 #无脊椎动物线粒体密码子模型
iqtree -s example.phy -T AUTO -b 1000 -st AA #氨基酸模型
100条序列800个位点的文件跑自举值1000的核苷酸模型需要5-8小时,密码子模型需要13-24小时,最开始跑密码子模型时会消耗大量运算资源,基本就是有多少用多少,这个时间大概会持续半小时。
iqtree version: 2.2.0
ERROR: iqtree.cpp:3105: virtual std::pair<int, int> IQTree::optimizeNNI(bool): Assertion `curScore > appliedNNIs.at(0).newloglh - 0.1' failed.
ERROR: STACK TRACE FOR DEBUGGING:
ERROR: 1 funcAbort()
ERROR: 2 ()
ERROR: 3 gsignal()
ERROR: 4 abort()
ERROR: 5 ()
ERROR: 6 IQTree::optimizeNNI(bool)
ERROR: 7 IQTree::doNNISearch(bool)
ERROR: 8 IQTree::doTreeSearch()
ERROR: 9 runTreeReconstruction(Params&, IQTree*&)
ERROR: 10 runStandardBootstrap(Params&, Alignment*, IQTree*)
ERROR: 11 runPhyloAnalysis(Params&, Checkpoint*, IQTree*&, Alignment*&)
ERROR: 12 runPhyloAnalysis(Params&, Checkpoint*)
ERROR: 13 main()
ERROR: 14 __libc_start_main()
ERROR: 15 ()
ERROR:
ERROR: *** IQ-TREE CRASHES WITH SIGNAL ABORTED
ERROR: *** For bug report please send to developers:
ERROR: *** Log file: dnacodon_catalytic_segment2.log
ERROR: *** Alignment files (if possible)
NNI(nearest-neighbour interchange algorithm),是一种搜索邻近枝的算法,官方说可能的报错原因有:算法算的时候枝长是负数;模型冲突
解决方案:
①使用 -bnni
解决在快速自举中的模型冲突
②使用 -keep-ident
维持原有序列(iqtree在建树时会忽略所有位点都是gap的位点)
ERROR: phylokernelnew.h:3332: double PhyloTree::computeLikelihoodFromBufferGenericSIMD() [with VectorClass = Vec4d; bool FMA = true; bool SITE_MODEL = false]: Assertion `std::isfinite(tree_lh) && "Numerical underflow for lh-from-buffer"' failed.
ERROR: STACK TRACE FOR DEBUGGING:
ERROR: 1 funcAbort()
ERROR: 2 ()
ERROR: 3 gsignal()
ERROR: 4 abort()
ERROR: 5 ()
ERROR: 6 double PhyloTree::computeLikelihoodFromBufferGenericSIMD<Vec4d, true, false>()
ERROR: 7 PhyloTree::getBestNNIForBran(PhyloNode*, PhyloNode*, NNIMove*)
ERROR: 8 IQTree::evaluateNNIs(std::map<int, std::pair<Node*, Node*>, std::less<int>, std::allocator<std::pair<int const, std::pair<Node*, Node*> > > >&, std::vector<NNIMove, std::allocator<NNIMove> >&)
ERROR: 9 IQTree::optimizeNNI(bool)
ERROR: 10 IQTree::doNNISearch(bool)
ERROR: 11 IQTree::initCandidateTreeSet(int, int)
ERROR: 12 IQTree::doTreeSearch()
ERROR: 13 runTreeReconstruction(Params&, IQTree*&)
ERROR: 14 runStandardBootstrap(Params&, Alignment*, IQTree*)
ERROR: 15 runPhyloAnalysis(Params&, Checkpoint*, IQTree*&, Alignment*&)
ERROR: 16 runPhyloAnalysis(Params&, Checkpoint*)
ERROR: 17 main()
ERROR: 18 __libc_start_main()
ERROR: 19 ()
ERROR:
ERROR: *** IQ-TREE CRASHES WITH SIGNAL ABORTED
ERROR: *** For bug report please send to developers:
ERROR: *** Log file: dnacodon_seg2.log
ERROR: *** Alignment files (if possible)
数值不稳定、数值溢出?或者EM模型不适用
解决方案有:
①使用-m TEST
去忽略一些自由参数比较多的模型;
②使用-optalg BFGS
不使用EM算法
虽然搜索到了一些解决方案,但可惜的是,对我都不奏效,最后是放弃了标准自举使用快速自举才没有报错,如果你也是上述解决方案都不奏效,可以试试改成快速自举。
希望对你有用,欢迎讨论。
参考:
http://www.iqtree.org/doc/
IQ-TREE的使用 - 超快速用极大似然法构建进化树 - 简书 (jianshu.com)
https://groups.google.com/g/iqtree