系统发育分析各类方法

系统发育关系重建的方法有很多,例如最大似然法(ML)、贝叶斯推断法(BI)、邻接法(NJ)、最大简约法(MP)等,每种建树方法各有其特定优缺点,在很多文章中也能看到作者会采用多种不同的方法进行物种树重建以作为一种交叉验证方法。本文着重介绍其中一个经常出现的软件 Astral。

Astral 是一种 Coalescent-based method,与之不同的另一种方法为 Concatenated-based method

  1. Coalescent-based method: Coalescent-based 方法是一种模拟基因座的共同祖先的过程来构建进化树的方法。在这种方法中,每个基因座可能有自己独立的进化历史,而不是假设整个基因组有一个统一的历史,最后得到的物种树是这些基因座的统计整合。这种方法通常用于处理物种树和基因树的不一致性,比如基因水平转移、混合和不完全谱系分选。这是一种比较复杂的方法,通常在研究种群遗传学和进化过程时使用。
  2. Concatenated-based method: Concatenated-based 方法是将多个基因或基因片段首尾连接起来,形成一个长的序列,并使用这个长序列来构建一个单一的进化树。这种方法基于这样的假设,即所有基因或基因片段在整个进化过程中遵循相同的历史。它是一种较为简单和直接的方法,通常用于较大的数据集。请注意,部分方法可能为不同的基因指定不同进化模型,但其仍假设所有基因共享相同的进化历史。

Astral 运行方法

关于 Astral 的安装,可以前往其 github 根据介绍进行,或使用以下命令:

1
2
wget https://github.com/smirarab/ASTRAL/raw/master/Astral.5.7.8.zip
unzip Astral.5.7.8.zip # 解压后文件夹中的 `astral.5.7.8.jar` 即后续运行所需

关于 Astral 的运行,在这里你或许能得到最全面的了解:Astral tutorial

本文将以尽量最简洁的方式介绍 Astral 的运行及注意事项。

正如前文所说,Astral 是一种基于基因树的物种树重建方法,所以它是需要一组基因树作为输入来推断物种树的,原理大致如下:

汇总多个基因树的信息重建物种树,并使得这个物种树与这组基因树的 Quartet Score 最大化(在考虑四个物种时,一棵树可以有三种不同的拓扑结构,Astral 则会尝试寻找一个最能解释基因树数据的物种树拓扑结构)。

关于基因树,大部分文章都是使用 ML 方法(可选软件有 IQTREE or RAxML)推断得到的,假设我们现在已经有一组基因树并且它们以 .treefile 结尾,那么我们可以用这种方法将它们合并:

1
$ cat *treefile >> all.treefile

以上步骤将所有基因树汇集在同一文件中,随后即可使用 Astral 进行物种树重建(将 astral.5.7.8.jar 替换成自己的版本及路径):

1
$ java -jar astral.5.7.8.jar -i all.treefile -o astral.treefile 2> astral.log

最后生成的文件中,astral.treefile 为 Astral 的建树结果,astral.log 则包括建树的相关信息。

astral.log 中有一行需要特别注意:

  • Final normalized quartet score is: 0.xxxx

这一行后的数字代表有多少基因树中的 quartet tree 出现在最终的物种树中,这一指标也可以作为物种树和基因树间一致性的衡量标准,如果其值过低,则可能表明了严重的 ILS/Introgression (不完全谱系分选 / 渐渗,皆为基因树不一致的重要成因) 现象。

也有方法可以改善 Quartet Score —— 修剪掉基因树中自展值低的分支,可以通过 nw_ed 完成该操作:

1
2
3
4
# 安装
$ conda install -c bioconda newick_utils
$ nw_ed all.treefile 'i & b<=10' o > all-BS10.treefile # 自展值低于 10 则剪去
$ java -jar astral.5.7.8.jar -i all-BS10.treefile -o astral-BS10.treefile 2> astral-BS10.log

注:conda 安装不成功的也可前往其 github 页面并根据引导使用 make 安装。

其他可能需要注意的地方

关于这一部分更详尽也请前往 Astral github tutorial 页面。

①、Astral 并不通过 bootstrapping 得到分支支持率,而是使用了一种称为局部后验概率的方法进行计算,这种计算方法得到的支持率描述了给定的 quartet tree 拓扑在基因树数据中的支持程度(可以简单地将其理解成物种树中这个分支的拓扑结构受基因树拓扑的支持程度)。当然我们也可以选择使用 bootstrapping 方法得到支持率(这个情况下我们也可以叫它自展值):

指定 -b-r 参数,其中 -b 指定某个文件,该文件中每一行都指定一个基因树自举文件的路径;-r 指定重复次数,默认为 100。

注:作者特意表明了在他们所探索的情况中,局部后验概率方法是比 bootstrapping 更可靠的。

②、关于内存的问题:如果数据集过大(包含非常多的物种或基因树),那么可能就需要给 Java 提供更多的可用内存确保 Astral 能正常运行:

1
$ java -Xmx3000M -jar astral.5.7.8.jar -i in.tree

其中 -Xmx3000M 指定了 3GB 的可用内存,也可以直接替换成 -Xmx3G 等。该值可视自身情况进行调整。其他一些基于 Java 开发的生信软件也可以通过该方法分配内存。

后记

Astral 本身的操作难度并不高,但大道至简,这并不妨碍它出现在各个文章之中并作为代表物种树使用。

如果数据集有着严重的 ILS 和 Introgression 现象,那么就需要谨慎地对待 Astral 的结果。

更新

最近 Astral 的开发者做了一个新的工具 ASTER(发表在 Science 上),该工具的主要优势在于它能够高效处理大型比对数据并同时实现更高的准确率

CASTER: Direct species tree inference from whole-genome alignments

https://www.science.org/doi/10.1126/science.adk9688

感兴趣的朋友可以自行探索一下,其 github 链接:

https://github.com/chaoszhang/ASTER