随机超树

时间:2018-12-15 17:10:53

标签: python cluster-analysis phylogeny

我已经在python上实现了一个程序,该程序会生成随机的二叉树。所以现在我想给树的每个内部节点分配一个距离,以使其成为超度量。然后,根与任何叶子之间的距离必须相同。如果节点是叶子,则距离为空。这是一个节点:

class Node() :
    def __init__(self, G = None , D = None) :
        self.id = ""
        self.distG = 0
        self.distD = 0
        self.G = G
        self.D = D
        self.parent = None

我的想法是在开始处设置距离h,并在发现内部节点时减小距离h,但仅在左侧起作用。

def lgBrancheRand(self, h) :
    self.distD = h
    self.distG = h
    hrandomD = round(np.random.uniform(0,h),3)
    hrandomG = round(np.random.uniform(0,h),3)
    if self.D.D is not None :
        self.D.distD = hrandomD
        self.distD = round(h-hrandomD,3)
        lgBrancheRand(self.D,hrandomD)
    if self.G.G is not None :
        self.G.distG = hrandomG
        self.distG = round(h-hrandomG,3)
        lgBrancheRand(self.G,hrandomG)

1 个答案:

答案 0 :(得分:1)

总而言之,您将创建随机矩阵并将UPGMA应用于每个矩阵。

下面有更完整的答案

只需使用UPGMA算法。这是用于解析成对矩阵的聚类算法。

您将两对“分类单元”(技术上称为OTU)之间的总遗传距离除以2。您将成对矩阵中最接近的成员分配为第一个“节点”。重新格式化矩阵,以便将这两对组合成一个组(“删除”)并无限期找到下一个“最近邻居”。我怀疑R'ape'将具有超测度算法,这将使您免于编程。我看到您使用的是Python,因此BioPython MIGHT具有此功能(很大的功能),就我个人而言,我会通过预编译的C程序将其传递给管道,然后通过paup之类的东西收集结果。我不打算编写代码,因为我更喜欢Perl,如果Python问题中出现了任何Perl代码(帝国已经建立),我都会被炒鱿鱼。

无论如何,您会发现此算法可生成完美的超测树。纯粹主义者不喜欢通过这种算法得出的超度量树。但是,在您的计算中它可能很有用,因为您可以从真实数据中找到系统发育史,这与您所产生的零分布最像“时钟”。在这种情况下,这将很酷。


您可能希望提出有关生物信息学stackexchange的问题。