什么是iqtree?
iqtree是一款构建进化树的软件,类似于phyml,raxml。
文章地址:W-IQ-TREE: a fast online phylogenetic tool for maximum likelihood analysis | Nucleic Acids Research | Oxford Academic (oup.com)
官方说这款软件相比于其他构树软件的优势在于:
- 支持快速的bootstrap方法计算(Ultrafast bootstrap)
- 相比于jModelTest和ProtTest能够更快的进行构树模型的选择
- 能够对更大的数据集进行建树:几千条序列或者百万个位点
- 支持快速的系统发育关系检验方法:SH-aLRT 和 aBayes test
这款软件有本地版和在线版,在线版网址为IQTREE Web Server: Fast and accurate phylogenetic trees under maximum likelihood (univie.ac.at),这个网址能运行时间不超过24小时的分析。
iqtree 使用
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






博主,我之前没有设置线程,关了重跑,一直显示error:could not open log for logging这怎么解决啊
你把log文件删去重新跑应该就可以了
博主大大,请问氨基酸和蛋白质模型是一个意思吗?我想用最佳的氨基酸替代模型和Ultrasfast bootstrap来做一些蛋白序列的进化树,我可以这么写吗:iqtree example.phy –st AA -bb 1000 ? 如果是一个意思,那我直接iqtree example.phy -m MFP -bb 1000 是不是就可以了呀
可以的 他会自己识别氨基酸序列 -m都可以不用
@04b32891b383 好的谢谢!
博主您好,在跑Iqtree时,总是报错,说要加什么安全选项,是序列过多的原因吗?
是的 序列过长或者过多都会这样 因为有些建树模型没办法处理大数据 加safe 之后会自动跳过没办法使用的模型
博主大大,我用氨基酸的fasta文件跑,总是报错:ERROR: Sequence XP_017440444.1-3914-Vigna_angularis-Streptophyta contains too many characters (149),是因为序列太长了吗,但是核算为核苷酸才437个,还没有软件给的example.phy 测试文件的多诶,请问这是什么原因呀
@欧弟12138 会不会是序列名太长了?你把名称缩短试试呢