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
。中的额外IDDataFrame
是允许的(它们在计算中被忽略)。column (str, optional) -- 在以下情况下用作分组向量的列名 grouping 是一种
DataFrame
。必须在以下情况下提供 grouping 是一种DataFrame
。在以下情况下无法提供 grouping 是一维的array_like
。permutations (int, optional) -- 评估统计意义时要使用的排列数。必须大于或等于零。如果为零,则将跳过统计显著性计算,并且p值将
np.nan
。
- 返回:
统计检验结果,包括
test statistic
和p-value
。- 返回类型:
参见
备注
看见 [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
%sGroup
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
否则将引发错误。