skbio.stats.distance.permdisp

skbio.stats.distance.permdisp(distance_matrix, grouping, column=None, test='median', permutations=999, method='eigh', number_of_dimensions=10)[源代码]

用Marti检验多变量群分布的均匀性

状态:0.5.2版本的试验性版本。Anderson‘s PERMDISP2手术。

PERMDISP是一种多变量检验,类似于Levene的多变量方差齐性检验。通过将原始距离减少到主坐标来处理距离。PERMDISP计算F统计量以评估组之间的离散度是否显著

参数:
  • distance_matrix (DistanceMatrix or OrdinationResults) -- 距离矩阵,包含物体之间的距离(例如,微生物群落样本之间的距离)或在这样的矩阵上的PCoA结果。

  • grouping (1-D array_like or pandas.DataFrame) -- 指示将对象分配给组的矢量。例如,这些可以是字符串或整数,表示对象所属的组。如果 grouping 是一维的 array_like ,它必须与中的对象具有相同的长度和顺序 distance_matrix 。如果 grouping 是一种 DataFrame ,由指定的列 column 将用作分组向量。这个 DataFrame 必须按中的ID进行索引 distance_matrix (即行标签必须是距离矩阵ID),但ID之间的顺序 distance_matrix 以及 DataFrame 不需要是相同的。距离矩阵中的所有ID必须出现在 DataFrame 。中的额外ID DataFrame 是允许的(它们在计算中被忽略)。

  • column (str, optional) -- 在以下情况下用作分组向量的列名 grouping 是一种 DataFrame 。必须在以下情况下提供 grouping 是一种 DataFrame 。在以下情况下无法提供 grouping 是一维的 array_like

  • test ({'centroid', 'median'}) -- 确定是使用质心分析还是使用空间中值进行分析。

  • permutations (int, optional) -- 评估统计意义时要使用的排列数。必须大于或等于零。如果为零,则将跳过统计显著性计算,并且p值将 np.nan

  • method (str, optional) -- 执行PCoA时使用的特征分解方法。默认情况下,使用SciPy的 eigh ,它计算所有维度的精确特征向量和特征值。另一种方法是, fsvd ,使用更快的启发式特征分解,但会失去准确性。精度损失的大小取决于数据集。请注意,使用 fsvd 仍被认为是试验性的,应该谨慎使用。如果DISTANCE_MATRATE是DiolationResults对象,则不使用此参数。

  • number_of_dimensions (int, optional) -- 将距离矩阵减小到的维度(如果使用 fsvd 方法。不使用,如果 eigh 正在选择方法。

返回:

统计检验结果,包括 test statisticp-value

返回类型:

pandas.Series

抛出:
  • TypeError -- 如果在使用空间中值检验时,PCoA排序不是np.flat32或np.flat64类型,则空间中值函数将失败,应改用质心检验

  • ValueError -- 如果测试不是质心或中位数,或者如果方法不是EIGH或fsvd

  • TypeError -- 如果距离矩阵不是 skbio.DistanceMatrix

  • ValueError -- 如果只有一组人

  • ValueError -- 如果同时提供列表和列名

  • ValueError -- 如果为以下对象提供了列表 grouping 并且它的长度与距离矩阵中的ID数不匹配

  • ValueError -- 如果分组向量中的所有值都是唯一的

  • KeyError -- 如果分组中存在不在DISTANCE_MATRIX中的ID

参见

permanova, anosim

备注

此函数结果的重要性将与素食Betadisper中的结果相同,但由于浮点可变性,F统计结果可能会略有不同。

看见 [1] 对于原始方法引用,以及 vegan::betadisper ,在R‘s素食套餐中提供 [2].

引用

示例

加载表示两组对象的6x6距离矩阵和分组向量:

>>> from skbio import DistanceMatrix
>>> dm = DistanceMatrix([[0,    0.5,  0.75, 1, 0.66, 0.33],
...                       [0.5,  0,    0.25, 0.33, 0.77, 0.61],
...                       [0.75, 0.25, 0,    0.1, 0.44, 0.55],
...                       [1,    0.33, 0.1,  0, 0.75, 0.88],
...                       [0.66, 0.77, 0.44, 0.75, 0, 0.77],
...                       [0.33, 0.61, 0.55, 0.88, 0.77, 0]],
...                       ['s1', 's2', 's3', 's4', 's5', 's6'])
>>> grouping = ['G1', 'G1', 'G1', 'G2', 'G2', 'G2']

使用99个排列运行PERMDISP以计算p值:

>>> from skbio.stats.distance import permdisp
>>> import numpy as np
>>> #make output deterministic, should not be included during normal use
>>> np.random.seed(0)
>>> permdisp(dm, grouping, permutations=99)
method name               PERMDISP
test statistic name        F-value
sample size                      6
number of groups                 2
test statistic     ... 1.03...
p-value            ...
number of permutations          99
Name: PERMDISP results, dtype: object

返回值为 pandas.Series 对象,其中包含统计测试的结果。

要取消p值的计算而仅获得F统计量,请指定零排列:

>>> permdisp(dm, grouping, permutations=0)
method name               PERMDISP
test statistic name        F-value
sample size                      6
number of groups                 2
test statistic      ... 1.03...
p-value                        NaN
number of permutations           0
Name: PERMDISP results, dtype: object

PERMDISP使用质心或空间中值(通常也称为几何中值)基于两种类型的测试来计算方差。空间中位数被认为产生更稳健的测试统计,默认情况下使用此测试。使用迭代算法计算空间中值以从组中的所有其他点找到最佳最小点,而质心使用确定性公式计算。因此,这两个不同的测试产生的F统计量略有不同。

>>> np.random.seed(0)
>>> permdisp(dm, grouping, test='centroid', permutations=6)
method name               PERMDISP
test statistic name        F-value
sample size                      6
number of groups                 2
test statistic     ... 3.67...
p-value            ... 0.42...
number of permutations           6
Name: PERMDISP results, dtype: object

您还可以提供一个 pandas.DataFrame 以及表示分组而不是分组向量的列。下面的DataFrame的GROUPING列指定了与我们在前面的示例中使用的矢量相同的分组:

>>> import pandas as pd
>>> df = pd.DataFrame.from_dict(
...      {'Grouping': {'s1': 'G1', 's2': 'G1', 's3': 'G1', 's4': 'G2',
...                    's5': 'G2', 's6': 'G2'}})
>>> permdisp(dm, df, 'Grouping', permutations=6, test='centroid')
method name               PERMDISP
test statistic name        F-value
sample size                      6
number of groups                 2
test statistic      ... 3.67...
p-value             ... 0.42...
number of permutations           6
Name: PERMDISP results, dtype: object

请注意,在提供 DataFrame 行和/或列的排序不影响提取的分组向量。这个 DataFrame 必须通过距离矩阵ID进行索引(即,行标签必须是距离矩阵ID)。

如果ID(行)存在于 DataFrame 但不在距离矩阵中,它们被忽略。上一个示例的 s7 ID说明了这种行为:请注意,即使 DataFrame 有7个对象,在测试中只使用了6个(请参见上面结果中的“样本大小”行以确认这一点)。因此, DataFrame 可以是距离矩阵ID的超集。请注意,反之亦然:距离矩阵中的ID must 出现在 DataFrame 否则将引发错误。

应使用PERMDISP来确定距离矩阵中的组之间的色散是否显著分开。一个不显著的检验结果表明,组分散彼此相似。然后,应结合使用PERMANOVA或ANOSIM来确定组内聚类是否显著。