gpt4 book ai didi

python - 使用 Bio.phylo 从几棵树中创建共识树

转载 作者:太空宇宙 更新时间:2023-11-04 10:01:48 25 4
gpt4 key购买 nike

我对肠杆菌基因组中的 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 ) 的共识树。我选择 majority_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 的帮助。如果有人知道更多关于这个包的信息,那就太好了。

最佳答案

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

我们从以下三棵树开始:

three trees

这些以 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.

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

关于python - 使用 Bio.phylo 从几棵树中创建共识树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43187246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com