anderson_ksamp#
- scipy.stats.anderson_ksamp(samples, midrank=True, *, method=None)[source]#
针对 k 个样本的 Anderson-Darling 检验。
k 个样本的 Anderson-Darling 检验是对一个样本的 Anderson-Darling 检验的改进。该检验可以检验 k 个样本是否来自同一总体,且不需要指定该总体的分布函数。临界值取决于样本数量。
- 参数:
- samples类似一维数组的序列
数组中按数组排列的样本数据。
- midrank布尔值,可选
要计算的 Anderson-Darling 检验的类型。默认为 (True) 适用于连续和离散总体的中位数检验。如果为 False,则使用右边的经验分布。
- methodPermutatonMethod,可选
定义用于计算 p 值的方法。如果 method 是
PermutationMethod
的一个实例,则使用scipy.stats.permutation_test
计算 p 值,其中包含提供的配置选项和其他适当的设置。否则,将从表格中插值出 p 值。
- 返回:
- resAnderson_ksampResult
包含属性的对象
- statisticfloat
标准 k 样本 Anderson-Darling 检验统计数据。
- critical_valuesarray
显著性水平 25%、10%、5%、2.5%、1%、0.5%、0.1% 的临界值。
- pvaluefloat
检验的近似 p 值。如果没有提供 method,该值将取整/上限为 0.1%/25%。
- 引发:
- ValueError
如果提供的样本少于 2 个,样本为空,或者样本中没有不同的观察结果。
注释
[1] 定义了 k 样本 Anderson-Darling 检验的三个版本:一个用于连续分布,两个用于离散分布,其中可能会出现样本之间的联系。此例程的默认设置是计算基于中位次序经验分布函数的版本。该检验适用于连续和离散数据。如果将 midrank 设置为 false,则右侧经验分布用于离散数据的检验。根据 [1],如果在未针对样本之间的联系进行调整的检验中发生由于舍入错误导致的少量碰撞,则两个离散检验统计数据仅略有不同。
与 0.01 至 0.25 的显著性水平相对应的临界值取自 [1]。p 值取整/上限为 0.1%/25%。由于临界值范围可能会在未来版本中扩展,因此建议不要测试
p == 0.25
,而应不大于p >= 0.25
(下界类似)。0.14.0 版本中添加。
参考
示例
>>> import numpy as np >>> from scipy import stats >>> rng = np.random.default_rng() >>> res = stats.anderson_ksamp([rng.normal(size=50), ... rng.normal(loc=0.5, size=30)]) >>> res.statistic, res.pvalue (1.974403288713695, 0.04991293614572478) >>> res.critical_values array([0.325, 1.226, 1.961, 2.718, 3.752, 4.592, 6.546])
二个随机样本从同一个分布中取出的零假设在 5% 水平上可以被拒绝,因为返回的测试值大于 5% 的临界值 (1.961),但在 2.5% 水平上不可拒绝。插值给出了大约 4.99% 的 p 值。
>>> samples = [rng.normal(size=50), rng.normal(size=30), ... rng.normal(size=20)] >>> res = stats.anderson_ksamp(samples) >>> res.statistic, res.pvalue (-0.29103725200789504, 0.25) >>> res.critical_values array([ 0.44925884, 1.3052767 , 1.9434184 , 2.57696569, 3.41634856, 4.07210043, 5.56419101])
三样本取自同一分布的零假设无法被拒绝。报告的 p 值 (25%) 已上限,可能不十分准确(因为它与值 0.449 对应,而统计量为 -0.291)。
在 p 值上限或样本量小的情况下,排列检验可能会更准确。
>>> method = stats.PermutationMethod(n_resamples=9999, random_state=rng) >>> res = stats.anderson_ksamp(samples, method=method) >>> res.pvalue 0.5254