Python 确定折叠此树的截止点的算法?

Python 确定折叠此树的截止点的算法?,python,statistics,cluster-analysis,bioinformatics,collapse,Python,Statistics,Cluster Analysis,Bioinformatics,Collapse,我有一棵树,它是通过比较4-9bp长DNA序列的假定DNA调控基序的位置权重矩阵(PWMs或PSSM)的相似性(欧氏距离)构建的 iTol()上有一个交互式版本的树,您可以自由使用它-设置参数后只需按“更新树”: 我的具体目标:如果基序(尖端/末端节点/叶子)到最近的父分支的平均距离

我有一棵树,它是通过比较4-9bp长DNA序列的假定DNA调控基序的位置权重矩阵(PWMs或PSSM)的相似性(欧氏距离)构建的

iTol()上有一个交互式版本的树,您可以自由使用它-设置参数后只需按“更新树”:

我的具体目标:如果基序(尖端/末端节点/叶子)到最近的父分支的平均距离 我的问题:有谁能提出一种算法来输出或帮助可视化X的哪个值适合于“最大化折叠图案的生物学或统计相关性”?理想情况下,当根据X绘制时,树的某些属性会有一些明显的阶跃变化,这对算法来说是一个合理的X。是否有任何已知的算法/脚本/包用于此?也许代码会根据X的值绘制一些统计数据?我已经尝试绘制X与平均簇大小()的对比图,但我没有看到明显的“步长增加”来告诉我使用哪个X值:

我的代码和数据:我的Python脚本的链接是[here][8],我对它进行了大量的注释,它将生成树数据并为您绘制上面的图(使用参数d_from、d_to和d_step来探索距离截止点X)。如果您有easy install和Python,则只需执行以下两个bash命令即可安装ete2:

apt-get install python-setuptools python-numpy python-qt4 python-scipy python-mysqldb python-lxml

easy_install -U ete2

我想我需要知道更多,然后才能给出具体的建议。但也许这会有帮助。我假设每个终端节点都是一个序列,每个内部节点都是一个PSSM

X的计算是特定于应用程序的。例如,如果要折叠ultraparalogs,得到的X与要折叠所有同系物时得到的X不同

由于基因是通过复制和物种形成不断产生的,因此X没有一个单一的值可以根据进化关系来区分序列。因此,我不希望您只通过查看集群统计信息就可以找到一个令人满意的代理来确定序列之间的进化关系

更严格的方法是从每个调控基序的基因构建基因树,并将其与物种树相协调。有软件和额外的启发式方法来识别ortholog/inparalog


如果这样做,树的内部节点将被推断出的进化事件(例如,复制、物种形成)修饰。然后,您可以沿着树行走,为您不关心的分支折叠节点

你可以尝试使用@Jeff提到的类似于树对帐的东西。但标准的树协调实际上会失败

协调包括首先在整个目标树中添加表示进化特征“损失”的分支。然后指出进化特征发生“重复”的节点。损失和重复的加权总和提供了一个成本函数来优化

但是在你的例子中,你想要解决的问题是“把这棵超级树分解成大小合适的直系子树”。这意味着你不想像在复制中那样,真的想获得更多的损失。您需要一种对树进行评分的方法,以显示有多少正交子树合并到您的超级树中。因此,您可以尝试这种评分方法:

  • 拿一棵超级树,数一数重复物种的数量,S1
  • 折叠所有平行的顶生叶,计算新的重复物种数S2
  • S1和S2之间的差异显示了超级树中大约有多少子树
  • 纠正由不同大小的超级树除以超级树N中代表的独特物种数量所引起的任何偏差
  • 如果我们将该分数称为“子树因子”,则等于:

    S1-S2/N

    推论:

    • 如果S1-S2=S1,则意味着您的超级树中大约有一个真正的子树,所有多个物种的出现都是由于最近的paralogue

    • 如果S1-S2=0,则表示您的超级树中大约有S1个真正的子树


    @Llopis为了让我在评论中所说的更加清晰,我想这个问题应该在biostars中提出。“最大限度地发挥折叠图案的生物学相关性”对我来说几乎毫无意义。你能把这个编程问题换成一个编程问题吗?@hello_there_andy我知道它在生物信息学中,但我想问的是这个问题的本质。例如,needleman wunsch和smith waterman是字符串对齐和比较算法,它们使用矩阵将值与它们之间的相似性和差异关联起来。虽然矩阵中使用的实际值是以某种方式提出的,使得它们在生物学上与基因或蛋白质序列的研究相关,但它们可以很容易地调整以用于其他领域。我这么说并不是因为我认为这个问题不有趣或不相关,但因为你的问题似乎不在于实际的算法,而在于涉及的生物学相关值。在您进行的比较中,我觉得您试图确定相似性矩阵和差距惩罚的最佳值,而不是如何实现算法。如果是这样的话,我想我提到的社区会让你接触到那些实际上是联合国的专业人士