IQtree 默认构建的是无根系统发育树,但v2.1.3版本后 IQtree 提供了使用Lie Markov Model算法对系统发育树实现无外群生根功能(Rooting phylogenetic trees)。但在使用过程中,由于功能较新,IQtree 在处理 SNP 数据的过程中包含较多 Documentation 未说明的 Bug 。在有外群等先验信息的情况下,不推荐使用 iqtree 的 Lie Markov Model 算法生根。
本文主要包含两部分:系统发育树生根操作及踩坑内容,不包含生根原理。其中踩坑内容了解即可,可能随着 IQtree 版本的更新而得到修复。
PS:SNP 数据的处理步骤参见 IQtree:使用 SNP 数据(vcf file)构建玉米群体的 无根 系统发育树
数据集
本文使用的数据集矩阵大小为 577 × 10000。样本取自 577 个玉米品系,包含 70 个大刍草(par)、208 个热带品系(tst)、172 个温带品系(temp)、127 个混合品系(mixed)。SNP 取自 3 号染色体上 743w SNP,经过过滤(maf > 0,miss = 0)与随机抽样后,最终得到 1w SNP。数据已上传(链接如下,0 积分下载)。
IQtree:使用SNP数据(vcffile)构建系统发育树(数据)
系统发育树生根
IQtree 使用不可逆(non-reversible)模型中的Lie Markov模型进行无外群系统发育树根的位置的推断。
1)使用 IQtree 对所有 Lie Markov 模型进行遍历,寻找最适模型
iqtree -s SNP.varsites.phy -mset liemarkov -nt 100 -fast --prefix SNP.varsites.liemarkov.fast-mset遍历所有指定集合(本命令为 liemarkov)的替换模型计算每种模型下建树的似然值,并筛选出最优模型
本命令会逐个检索 Lie Markov 模型,当遍历到6.7a之后时,IQtree 会提示 2 个Warning:
WARNING: Numerical underflow for non-rev lh-branch NonameWARNING: evec not invertible
当遍历到9.2b后,IQtree 会报错。上述未报错的各种模型里6.7a+ASC+R5的 log-likelihood 值最大(-78103)。经过不同数据集的多次实验,作者发现使用 SNP.varsites.phy 这种不含任何 constant sites 的序列作为输入时,IQtree 大概率会在遍历到某个模型时报错。
2)使用最适模型6.7a+ASC+R5构建系统发育树
iqtree -s SNP.varsites.phy -m 6.7a+R5+ASC -nt 100 -fast --prefix SNP.varsites.6.7_R5_ASC.fast
系统发育树构建结果如上图所示,其中红色为大刍草品系,蓝色为热带品系,黑色为温带品系。
IQtree Lie Markov 模型踩坑
本文的生根步骤与 IQtree 教程差异较大,IQtree 建议包含 2 步,先局部再合并生根:
1. 使用常规模型对序列进行局部最优建树(-p)。iqtree2 -s SNP.varsites.phy -p SNP.varsites.nex -T AUTO --prefix rev_snp2. 使用 Lie Markov 模型将多个局部系统发育树合并且生根(--model-joint 12.12)。iqtree2 -s SNP.varsites.phy -p rev_snp.best_scheme.nex --model-joint 12.12 -T AUTO --prefix nonrev_snp
先局部再合并生根策略的目的可能是提高建树与生根的准确性,但 SNP.varsites.phy 文件运行第二步合并时会报错。除此之外,Lie Markov 模型与许多功能连用都会报错,现记录如下:
1. --model-jointiqtree -s SNP.varsites.phy -p rev_snp.best_scheme.nex --model-joint 6.7a+ASC+R5 -nt 100 -fast --prefix nonrev_snp2. --lmapiqtree -s SNP.varsites.phy -m 6.7a+ASC+R5 -lmap 10000 -fast -nt 100 --prefix nonrev_snp.lmap1w3. --root-testiqtree -s SNP.varsites.phy -m 6.7a+ASC+R5 --root-test -zb 1000 -te SNP.varsites.6.7_R5_ASC.fast.treefile -fast -nt 100 --prefix nonrev_snp.root_test
PS:除 IQtree 教程推荐的先局部再合并生根策略外,作者还考虑过限制发育树结构,以提高建树与生根的准确性。
1. 先构建无根进化树iqtree -s SNP.varsites.phy -m GTR+F+R6+ASC -fast -nt 100 --prefix rev_snp2. 再以无根进化树为模板(-te)生根iqtree -s SNP.varsites.phy -m 6.7a+ASC+R5 -te rev_snp.treefile -fast -nt 100 --prefix nonrev_snp
但实验结果显示,IQtree 不修改 -te 所提供的树的拓扑结构,只修改整体的分枝长度。对比 log 日志可以发现,-te 参数下 iqtree 只进行 FINALIZING TREE SEARCH 步骤,因为 Estimate model parameters (epsilon = 0.050)。下表罗列了 3 次重复实验的结果,其中 treefile 输入 iTOL 后可以发现拓扑结构完全一致,分枝之间的长度关系基本完全一致,区别仅为比例尺(tree scale)。