skbio.tree.nj¶
- skbio.tree.nj(dm, disallow_negative_branch_length=True, result_constructor=None)[源代码]¶
应用邻域连接进行系统发育重建。
状态:从0.4.0开始实验。
- 参数:
dm (skbio.DistanceMatrix) -- 输入包含OTU之间距离的距离矩阵。
disallow_negative_branch_length (bool, optional) -- 邻居连接可能导致负分支长度,这在进化上下文中没有意义。如果 True ,负分支长度将返回为零,这是该算法的原始开发人员提出的处理此问题的通用策略。
result_constructor (function, optional) -- 函数来构造结果对象。这必须以newick格式的字符串作为输入。将此函数应用于newick格式字符串的结果将从此函数返回。默认为
lambda x: TreeNode.read(StringIO(x), format='newick')
.
- 返回:
默认情况下,结果对象是 TreeNode ,但这可以通过传递来覆盖 result_constructor .
- 返回类型:
备注
邻里加入最初是在Saitou和Nei(1987)中描述的 [1]. 这里展示的例子来自Wikipedia关于邻居加入的页面 [2]. Phylip手册也描述了该方法 [3] 而Phylip本身提供了一个对比较有用的实现。
根据定义,邻接连接创建无根树。对生成的树进行生根的一种策略是中点生根,它可以作为
TreeNode.root_at_midpoint
.引用
示例
定义一个新的距离矩阵对象,描述五个OTU之间的距离:a、b、c、d和e。
>>> from skbio import DistanceMatrix >>> from skbio.tree import nj
>>> data = [[0, 5, 9, 9, 8], ... [5, 0, 10, 10, 9], ... [9, 10, 0, 8, 7], ... [9, 10, 8, 0, 3], ... [8, 9, 7, 3, 0]] >>> ids = list('abcde') >>> dm = DistanceMatrix(data, ids)
构造表示这些otu之间关系的邻居连接树。这将作为TreeNode对象返回。
>>> tree = nj(dm) >>> print(tree.ascii_art()) /-d | | /-c |---------| ---------| | /-b | \--------| | \-a | \-e
同样,构造邻居连接树,但返回表示树的newick字符串,而不是TreeNode对象。(请注意,在本例中,字符串输出在打印时被截断,以便于呈现。)
>>> newick_str = nj(dm, result_constructor=str) >>> print(newick_str[:55], "...") (d:2.000000, (c:4.000000, (b:3.000000, a:2.000000):3.00 ...