【问题标题】:Make a consensus tree from several tree using Bio.phylo使用 Bio.phylo 从几棵树中创建共识树
【发布时间】:2017-04-03 14:25:25
【问题描述】:

我对肠杆菌属细菌基因组中的 4 个管家基因感兴趣。

所以我有了看家基因,我在 NR 上大放异彩并下载了对齐的序列。

我用MEGA7软件用最大似然法制作了系统发育树。 Boostrap 方法进行了 200 次迭代。

我将我的树导出为 newick 文件。

所以现在,我的 4 个管家基因有 4 棵树。我想为我的 4 棵树创建一个共识树。

我个人尝试使用来自 Bio.Phylo (http://biopython.org/DIST/docs/api/Bio.Phylo.Consensus-module.html#strict_consensus) (http://biopython.org/wiki/Phylo) 的共识树。 我选择了 major_consensus 函数,它工作得很好。但我有一个问题。

我的“脚本”是这样的:

import os

import sys

from Bio import Phylo

from Bio.Phylo.Consensus import *

fichier=sys.argv[1]

fichier2=sys.argv[2]

fichier3=sys.argv[3]

fichier4=sys.argv[4]

tree1=Phylo.read(fichier, 'newick')

tree2=Phylo.read(fichier2, 'newick')

tree3=Phylo.read(fichier3, 'newick')

tree4=Phylo.read(fichier4, 'newick')

trees=tree1,tree2,tree3,tree4

majority_tree = majority_consensus(trees, 0.5)

Phylo.draw(majority_tree)

问题在于共识树依赖于顺序。 例如,当我 try trees = tree1,tree2,tree3,tree4trees = tree2,tree4,tree1,tree3 时,我得到了不同的结果

有人知道其他软件可以从 newick 文件中生成共识树吗?

我需要Bio.Phylo 方面的帮助。如果有人知道更多关于这个包的信息,那就太好了。

【问题讨论】:

  • 欢迎来到 SO。你的英语很清楚,但你的问题不是。它似乎与生物学和您打算使用的树构建算法的细节有关。也许您的问题更适合biology stack exchange。然而,如果你的问题实际上是关于编程的,你应该改写它:跳过关于统计和生物学的细节。提供一个可以被其他人复制的示例(例如,我们缺少您的文件)。清楚地说明你的编程问题的性质。这将增加您获得答案的机会。
  • 谢谢。 BioGeek 很好地理解了我的问题。它是关于生物学的,但它是一个信息学问题。谢谢你的回复:)
  • 我很高兴您得到了满意的答案 :-) 我阅读了答案并看到了 Newick 格式的插图,因此我更好地理解了您的问题。

标签: python bioinformatics biopython phylogeny


【解决方案1】:

由于您没有发布 newick 文件,让我们尝试重现您的问题,以便我们有一个 Minimal, Complete, and Verifiable example 表明共识树依赖于顺序。

我们从以下三棵树开始:

这些以newick格式表示如下:

newicks = {1: '((A,B,C),(D,(E,F)))',
           2: '(((A,B),C),(D,(E,F)))',
           3: '((A,B,C),(E,(D,F)))'}

现在我们尝试这三棵树的所有可能排列,创建共识树并查看它们是否都相同:

from io import StringIO
from Bio import Phylo
from Bio.Phylo.Consensus import majority_consensus
from itertools import permutations

def read_newick(treedata):
    handle = StringIO(treedata)
    return Phylo.read(handle, "newick")

for keys in permutations(newicks.keys()):
    trees = [read_newick(newicks[key]) for key in keys]
    majority_tree = majority_consensus(trees, 0.5)
    print('majority consensus for order: {}'.format(keys))
    Phylo.draw_ascii(majority_tree)

结果:

majority consensus for order: (1, 2, 3)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ D
 |________________________|
                          |                         ________________________ E
                          |________________________|
                                                   |________________________ F

majority consensus for order: (1, 3, 2)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ D
 |________________________|
                          |                         ________________________ E
                          |________________________|
                                                   |________________________ F

majority consensus for order: (2, 1, 3)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ D
 |________________________|
                          |                         ________________________ E
                          |________________________|
                                                   |________________________ F

majority consensus for order: (2, 3, 1)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ D
 |________________________|
                          |                         ________________________ E
                          |________________________|
                                                   |________________________ F

majority consensus for order: (3, 1, 2)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ E
 |________________________|
                          |                         ________________________ D
                          |________________________|
                                                   |________________________ F

majority consensus for order: (3, 2, 1)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ E
 |________________________|
                          |                         ________________________ D
                          |________________________|
                                                   |________________________ F

确实,最后两个共识树与前四个共识树不同。

要了解为什么会发生这种情况,我们查看majority_consensus() 的源代码。在那里我们看到第一步是创建根进化枝。终端进化枝的顺序由提供的第一棵树确定。

所以对于(tree1, tree2, tree3),第一个提供的树是tree1,根进化枝是ABCDEF。但是对于(tree3, tree2, tree1),提供的第一棵树是tree3,根进化枝变为ABCEDF

因此,这是算法本身的限制,任何多数共识的实现都会根据提供的第一个树为您提供不同的顺序。

【讨论】:

  • 谢谢。你的例子很清楚,你真的很好理解我的问题。很抱歉没有发布我的数据,它是一棵大树,我不知道如何发布它。不过多亏了你。你举了一个很好的例子。所以我对此无能为力。因为无论输入文件的顺序如何,我都在等待拥有相同的共识树。非常感谢您的回复:)
  • 我很惊讶多数规则取决于输入顺序。如果 biopyton 是这种情况,这可能是算法错误。结果应该包含进化枝 (E, F),因为它存在于 2/3 的树中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多