python - 随机超度量树

标签 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 并在找到内部节点时减少它,但它只在左侧工作。

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)

最佳答案

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

下面有更完整的答案

简单的使用UPGMA算法。这是一种用于解析成对矩阵的聚类算法。

您将两对“类群”(技术上称为 OTU)之间的总遗传距离除以二。您将成对矩阵中最接近的成员指定为第一个“节点”。重新格式化矩阵,以便将这两对组合成一个组(“删除”)并无限查找下一个“最近的邻居”。我怀疑 R 'ape' 会有一个超度量算法,可以让你免于编程。我看到你正在使用 Python,所以 BioPython 可能有这个(大 MIGHT),我个人会通过一个预编译的 C 程序来传递它,并通过 paup 之类的东西收集结果。我不打算编写代码,因为我更喜欢 Perl,如果 Python 问题中出现任何 Perl 代码(帝国已经建立),我会被激怒。

无论如何你会发现这个算法产生了一个完美的超度量树。最纯粹的人不喜欢通过这种算法派生的超度量树。但是,在您的计算中它可能很有用,因为您可以从真实数据中找到系统发育,这与您正在生成的空分布最“类似时钟”。在这种情况下,它会很酷。


您可能更愿意在 bioinformatics stackexchange 上提出问题。

关于python - 随机超度量树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53795420/

相关文章:

python-3.x - 在 ete3 中为热图添加标签

Python SQLite SELECT LIKE IN [列表]

python - 如何按日期对值进行排序并按列删除重复项?

javascript - 网络中的社区/集群检测算法 - 用 javascript 实现?

r - 包tm。 kmeans 的问题

python - 计算特定格式(使用 Python)中的组数(具有特定 TAG)

python - sklearn LogisticRegressionCV 是否将所有数据用于最终模型

python - 更改 noauth_local_webserver 的默认状态?

python - 如何在sklearn中打印聚类结果

python - Biopython 给出 ValueError : Sequences must all be the same length even though sequences are of the same length