skbio.stats.distance.bioenv

skbio.stats.distance.bioenv(distance_matrix, data_frame, columns=None)[源代码]

找到与距离最大相关的变量子集。

状态:从0.4.0开始实验。

查找其欧几里得距离(在缩放变量之后;有关详细信息,请参阅下面的注释部分)与距离矩阵具有最大等级相关性的变量子集。例如,距离矩阵可能包含社区之间的距离,变量可能是数值环境变量(例如,pH)。利用Spearman等级相关系数计算群落距离矩阵和欧几里得环境距离矩阵之间的相关性 (\(\rho\) )。

环境变量的子集的大小范围从1到变量总数(包括)。例如,如果有3个变量,将针对子集大小1、2和3计算“最佳”变量子集。

在给定的子集大小下,通过计算社区距离矩阵和所有可能的欧几里德环境距离矩阵之间的相关性来选择最佳子集。具有最大相关性的环境变量组合被选为“最佳”子集。

参数:
  • distance_matrix (DistanceMatrix) -- 包含物体之间距离的距离矩阵(例如,微生物群落样本之间的距离)。

  • data_frame (pandas.DataFrame) -- 包含与中的对象关联的变量列(例如,数值环境变量,如pH distance_matrix 。必须按中的ID进行索引 distance_matrix (即行标签必须是距离矩阵ID),但ID之间的顺序 distance_matrixdata_frame 不需要是相同的。距离矩阵中的所有ID必须出现在 data_frame 。中的额外ID data_frame 是允许的(它们在计算中被忽略)。

  • columns (iterable of strs, optional) -- 中的列名 data_frame 作为变量包含在计算中。如果未提供,则默认为中的所有列 data_frame 。每列中的值必须是数值或可转换为数值类型。

返回:

数据帧包含每个子集大小的变量的“最佳”子集,以及每个子集的相关系数。

返回类型:

pandas.DataFrame

抛出:
  • TypeError -- 如果提供了无效的输入类型,或者如果 data_frame 不是数字。

  • ValueError -- 如果列名(S)或 distance_matrix 无法在以下位置找到ID data_frame ,如果有丢失的数据 (NaN )在环境变量中,或者如果环境变量不能缩放(例如,由于零方差)。

备注

看见 [1] 用于原始方法引用(最初称为BIO-ENV)。通用算法和界面类似于 vegan::bioenv ,在R‘s素食套餐中提供 [2]. 这种方法也可以在Primer-E中找到 [3] (最初称为BIO-ENV,但现在称为BEST)。

警告

此方法可能需要一个 long 如果指定了大量变量,则运行时间,因为所有可能的子集都按每个子集大小进行计算。

在计算欧几里得距离之前对变量进行缩放:每列居中,然后按其标准偏差进行缩放。

引用

示例

导入我们将在以下示例中使用的功能:

>>> import pandas as pd
>>> from skbio import DistanceMatrix
>>> from skbio.stats.distance import bioenv

加载4x4社区距离矩阵:

>>> dm = DistanceMatrix([[0.0, 0.5, 0.25, 0.75],
...                      [0.5, 0.0, 0.1, 0.42],
...                      [0.25, 0.1, 0.0, 0.33],
...                      [0.75, 0.42, 0.33, 0.0]],
...                     ['A', 'B', 'C', 'D'])

加载为 pandas.DataFrame 有两个环境变量,pH和海拔:

>>> df = pd.DataFrame([[7.0, 400],
...                    [8.0, 530],
...                    [7.5, 450],
...                    [8.5, 810]],
...                   index=['A','B','C','D'],
...                   columns=['pH', 'Elevation'])

请注意,数据框使用相同的ID进行索引 ('A''B''C' ,以及 'D' ),它们位于距离矩阵中。为了将环境变量(元数据)链接到距离矩阵中的每个对象,这是必要的。在本例中,ID在距离矩阵和数据帧中以相同的顺序出现,但这不是必需的。

找到与社区距离相关的环境变量的最佳子集:

>>> bioenv(dm, df) 
               size  correlation
vars
pH                1     0.771517
pH, Elevation     2     0.714286

我们看到,在这个简单的例子中,单是PH值就与群落距离具有最大的等级相关性 (\(\rho=0.771517\) )。