我对肠杆菌属细菌基因组中的4个管家基因感兴趣。
所以我有我的管家基因,我在NR上做了一个爆炸并下载了对齐的序列。
我使用具有最大似然法的MEGA7软件制作了系统发育树。 Boostrap方法进行了200次迭代。
我将树导出为newick文件。
所以现在,我的4个管家基因有4棵树。我想创建一棵四棵树的共识树。
我个人尝试使用Bio.Phylo(http://biopython.org/DIST/docs/api/Bio.Phylo.Consensus-module.html#strict_consensus)(http://biopython.org/wiki/Phylo)的共识树。 我选择了most_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,tree4
和trees = tree2,tree4,tree1,tree3
是否有人知道另一个软件从newick文件制作共识树?
我需要Bio.Phylo
的帮助。如果有人知道这个包的更多信息,那就太棒了。
答案 0 :(得分:4)
由于您没有发布您的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
,根分支变为ABC
ED
F
。
所以,这是算法本身的一个限制,多数共识的任何实现都会根据第一个提供的树给你一个不同的顺序。
答案 1 :(得分:0)
所以根据BioGeek,我无法用Bio.Phylo.consensus来解决我的问题。
“所以,这是算法本身的一个限制,多数共识的任何实现都会根据第一个提供的树给你一个不同的顺序。”
是否有人知道另一种软件可以从几个不同的树中创建系统发育共识树。
感谢大家:)