skbio.stats.distance.anosim

skbio.stats.distance.anosim(distance_matrix, grouping, column=None, permutations=999)[源代码]

使用ANOSIM测试各组之间的显著差异。

状态:从0.4.0开始实验。

相似性分析(ANOSIM)是一种非参数方法,它基于分类因素测试两组或更多组对象(例如,样本)是否显著不同。距离矩阵中距离的等级被用来计算R统计量,其范围在-1(反分组)到+1(强分组)之间,R值为0表示随机分组。

统计意义通过排列检验来评估。将对象分配到组 (grouping )被随机置换多次(通过控制 permutations )。为每个排列计算R统计量,并且p值是等于或大于原始(未排列)R统计量的排列的R统计量的比例。

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

  • 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

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

返回:

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

返回类型:

pandas.Series

参见

permanova

备注

看见 [1] 用于原始方法引用。通用算法和界面类似于 vegan::anosim ,在R‘s素食套餐中提供 [2].

P值将为 np.nan 如果 permutations 是零。

引用

示例

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

>>> from skbio import DistanceMatrix
>>> dm = DistanceMatrix([[0, 1, 1, 4],
...                      [1, 0, 3, 2],
...                      [1, 3, 0, 3],
...                      [4, 2, 3, 0]],
...                     ['s1', 's2', 's3', 's4'])
>>> grouping = ['Group1', 'Group1', 'Group2', 'Group2']

使用99个排列运行ANOSIM来计算p值:

>>> import numpy as np
>>> # make output deterministic; not necessary for normal use
>>> np.random.seed(0)
>>> from skbio.stats.distance import anosim
>>> anosim(dm, grouping, permutations=99)
method name               ANOSIM
test statistic name            R
sample size                    4
number of groups               2
test statistic              0.25
p-value                     0.67
number of permutations        99
Name: ANOSIM results, dtype: object

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

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

>>> anosim(dm, grouping, permutations=0)
method name               ANOSIM
test statistic name            R
sample size                    4
number of groups               2
test statistic              0.25
p-value                      NaN
number of permutations         0
Name: ANOSIM results, dtype: object

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

>>> # make output deterministic; not necessary for normal use
>>> np.random.seed(0)
>>> import pandas as pd
>>> df = pd.DataFrame.from_dict(
...     {'Group': {'s2': 'Group1', 's3': 'Group2', 's4': 'Group2',
...                's5': 'Group3', 's1': 'Group1'}})
>>> anosim(dm, df, column='Group', permutations=99)
method name               ANOSIM
test statistic name            R
sample size                    4
number of groups               2
test statistic              0.25
p-value                     0.67
number of permutations        99
Name: ANOSIM results, dtype: object

结果与上面的第一个示例相匹配。

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

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