skbio.diversity.beta.weighted_unifrac

skbio.diversity.beta.weighted_unifrac(u_counts, v_counts, otu_ids, tree, normalized=False, validate=True)[源代码]

使用或不使用分支长度标准化计算加权UniFrac

状态:从0.4.1开始试验。

参数:
  • u_counts (list, np.array) -- 两个样品的OTUS计数/丰度向量。长度必须相等。

  • v_counts (list, np.array) -- 两个样品的OTUS计数/丰度向量。长度必须相等。

  • otu_ids (list, np.array) -- 与中的提示名称对应的OTU ID的矢量 tree 。长度必须与 u_countsv_counts

  • tree (skbio.TreeNode) -- 在OTU_ID中关联OTU的树。树中的尖端名称集可以是 otu_ids ,但不是子集。

  • normalized (boolean, optional) -- 如果 True ,应用分支长度标准化,如中所述 [1]. 生成的距离将在该范围内 [0, 1]

  • validate (bool, optional) -- 如果 False ,将不执行输入验证。此步骤可能很慢,因此如果在其他地方运行验证,则可以在此处禁用它。但是,无效的输入数据可能导致无效的结果或难以解释的错误消息,因此如果您不确定输入数据是否有效,则不应跳过此步骤。看到了吗 skbio.diversity 有关验证所需内容的说明,以便确定是否可以安全地禁用验证。

返回:

两个采样之间的加权UniFrac距离。

返回类型:

float

抛出:

ValueError, MissingNodeError, DuplicateNodeError -- 如果验证失败。确切的错误将取决于什么是无效的。

备注

加权UniFrac最初在中描述 [1], 其中包括对未加权(定性)和加权(定量)多样性度量的讨论。这一度量的更深层次的数学讨论在 [2].

如果计算多对样本的加权UniFrac,则使用 skbio.diversity.beta_diversity 将比对每个示例单独调用此函数快得多。

这个实现不同于在PyCogent中的实现(因此QIIME版本低于2.0.0),它对输入施加了一些额外的限制。首先,输入树必须是根的。在PyCogent中,如果提供的无根树只有一个三叉节点(无根树的Newick约定),则该节点被视为树的根。接下来,所有OTU ID都必须是树中的TIPS。PyCogent会默默忽略没有出现在树中的OTU ID。要使用SCISKIT-BIO从PyCogent复制UniFrac结果,请确保您的PyCogent UniFrac计算是在有根的树上执行的,并且所有OTU ID都存在于该树中。

加权UniFrac的此实现是中描述的基于数组的实现 [3].

如果使用大量样本或大树,我们建议使用优化的UniFrac库 [4].

引用

示例

假设我们有以下两个样本的丰富数据, uv ,表示为一对计数向量。这些计数表示在每个样本中观察到特定操作分类单元(OTU)的次数。

>>> u_counts = [1, 0, 0, 4, 1, 2, 3, 0]
>>> v_counts = [0, 1, 1, 6, 0, 1, 0, 0]

因为UniFrac是一个系统进化多样性度量,所以我们需要知道每个计数对应于哪个OTU,我们将以 otu_ids

>>> otu_ids = ['OTU1', 'OTU2', 'OTU3', 'OTU4', 'OTU5', 'OTU6', 'OTU7',
...            'OTU8']

我们还需要一个将OTUS彼此联系起来的系统发育树。

>>> from io import StringIO
>>> from skbio import TreeNode
>>> tree = TreeNode.read(StringIO(
...                      '(((((OTU1:0.5,OTU2:0.5):0.5,OTU3:1.0):1.0):0.0,'
...                      '(OTU4:0.75,(OTU5:0.5,((OTU6:0.33,OTU7:0.62):0.5'
...                      ',OTU8:0.5):0.5):0.5):1.25):0.0)root;'))

计算采样之间的加权UniFrac距离。

>>> from skbio.diversity.beta import weighted_unifrac
>>> wu = weighted_unifrac(u_counts, v_counts, otu_ids, tree)
>>> print(round(wu, 2))
1.54

计算样本之间的加权UniFrac距离,包括分支长度归一化,以便该值落在范围内 [0.0, 1.0]

>>> wu = weighted_unifrac(u_counts, v_counts, otu_ids, tree,
...                       normalized=True)
>>> print(round(wu, 2))
0.33