Biopython如何确定系统发育树的根?

How does Biopython determine the root of a phylogenetic tree?

还有其他包,特别是 ape 用于 R,构建无根树然后允许您通过 explicitly specifying an outgroup 将其根化。

相比之下,在 BioPython 中我可以直接创建有根树而不指定根,所以我想知道根是如何确定的,例如通过以下代码。

from Bio import AlignIO
alignment = AlignIO.read('mulscle-msa-aligned-105628a58654.fasta', 'fasta')
from Bio.Phylo.TreeConstruction import DistanceCalculator
calculator = DistanceCalculator('ident')
dm = calculator.get_distance(alignment)
from Bio.Phylo.TreeConstruction import DistanceTreeConstructor
constructor = DistanceTreeConstructor()
tree = constructor.upgma(dm)
from Bio import Phylo
Phylo.write(tree, 'phyloxml-7016bed7d42.xml', 'phyloxml')

我在构建树后在此处编排序列,但尽管如此,这是从该过程构建的有根树。

正如@cel所说,这是UPGMA算法的产物。 UPGMA 通过从现在开始(或您的数据来自的任何时候)反向工作来创建一棵树。它首先找到两个最相似的物种。从理论上讲,这些物种的共同祖先比任何其他物种对都更近,因此它们被归为一类。他们的共同祖先与树中其他物种的相似性是通过平均每个物种与该组所有成员的相似性来粗略估计的。

这个过程继续进行,每一步将树中两个最相似的物种(或假定的共同祖先)分组,然后重新计算相似度,直到只剩下两组。这些群体中的一个可能只有一名成员,在这种情况下,它可以有效地被认为是外群体,但它们也可能都有许多成员。树的根是这两组的共同祖先。