skbio.tree.majority_rule¶
- skbio.tree.majority_rule(trees, weights=None, cutoff=0.5, support_attr='support', tree_node_class=<class 'skbio.tree._tree.TreeNode'>)[源代码]¶
从根目录树的列表中确定一致树
状态:从0.4.0开始实验。
- 参数:
trees (list of TreeNode) -- 要手术的树
weights (list or np.array of {int, float}, optional) -- 如果提供,则列表必须按索引顺序排列 trees . 每棵树将获得相应的权重。如果省略,所有树的权重将相等。
cutoff (float, 0.0 <= cutoff <= 1.0, optional) -- 任何具有<=截止支持的clade将被丢弃。如果截止值小于0.5,则有可能出现平局。如果是这样,则根据列表排序顺序随意断开连接。
support_attr (str, optional) -- 要装饰到包含一致支持的结果树上的属性。
tree_node_class (type, optional) -- 指定返回的一致性树的类型。或者
TreeNode
(默认值)或实现相同接口的类型(最有用的是TreeNode
)
- 返回:
每棵树都是 tree_node_class . 在输入端表示的两个或多个不相交的提示集的情况下,可以返回多个树。
- 返回类型:
list of tree_node_class instances
备注
此代码改编自PyCogent最初由Matthew Wakefield编写的多数一致性代码。该方法基于中一致树的原始描述 [1]. Phylip手册中提供了其他说明 [2]. 此方法不支持扩展的多数规则。
支持度计算为树权重的加权平均值,在树权重中观察到枝梗。例如,如果在5棵树中观察到{A,B,C},且权重均为1,则其支持度将为5。
引用
示例
使用Phylip手册中的示例计算多数一致性,但我们正在计算多数规则而不是扩展的多数规则。
>>> from skbio.tree import TreeNode >>> from io import StringIO >>> trees = [ ... TreeNode.read(StringIO("(A,(B,(H,(D,(J,(((G,E),(F,I)),C))))));")), ... TreeNode.read(StringIO("(A,(B,(D,((J,H),(((G,E),(F,I)),C)))));")), ... TreeNode.read(StringIO("(A,(B,(D,(H,(J,(((G,E),(F,I)),C))))));")), ... TreeNode.read(StringIO("(A,(B,(E,(G,((F,I),((J,(H,D)),C))))));")), ... TreeNode.read(StringIO("(A,(B,(E,(G,((F,I),(((J,H),D),C))))));")), ... TreeNode.read(StringIO("(A,(B,(E,((F,I),(G,((J,(H,D)),C))))));")), ... TreeNode.read(StringIO("(A,(B,(E,((F,I),(G,(((J,H),D),C))))));")), ... TreeNode.read(StringIO("(A,(B,(E,((G,(F,I)),((J,(H,D)),C)))));")), ... TreeNode.read(StringIO("(A,(B,(E,((G,(F,I)),(((J,H),D),C)))));"))] >>> consensus = majority_rule(trees, cutoff=0.5)[0] >>> for node in sorted(consensus.non_tips(), ... key=lambda k: k.count(tips=True)): ... support_value = node.support ... names = ' '.join(sorted(n.name for n in node.tips())) ... print("Tips: %s, support: %s" % (names, support_value)) Tips: F I, support: 9.0 Tips: D H J, support: 6.0 Tips: C D H J, support: 6.0 Tips: C D F G H I J, support: 6.0 Tips: C D E F G H I J, support: 9.0 Tips: B C D E F G H I J, support: 9.0
在下一个示例中,将返回多个树,如果在树之间没有很好地支持类,则可能会发生这种情况。此外,如果不是所有树都有提示,则可能会出现这种情况。
>>> trees = [ ... TreeNode.read(StringIO("((a,b),(c,d),(e,f));")), ... TreeNode.read(StringIO("(a,(c,d),b,(e,f));")), ... TreeNode.read(StringIO("((c,d),(e,f),b);")), ... TreeNode.read(StringIO("(a,(c,d),(e,f));"))] >>> consensus_trees = majority_rule(trees) >>> len(consensus_trees) 4