5

我想将成对的样本与 Kolmogorov-Smirnov (KS) 和 Anderson-Darling (AD) 测试进行比较。我分别用scipy.stats.ks_2samp和实现了这个scipy.stats.anderson_ksamp。我希望相似样本的统计量较低(相同样本为 0),而更多不同样本的统计量较高。

在相同样本和非常不同的样本(没有重叠)的情况下,ks_2samp提供预期的结果,同时anderson_ksamp为相同的样本提供负值,更重要的是,对于非常不同的样本会引发错误(可能是由于样本量:200在下面的示例中)。

以下是说明这些发现的代码:

import scipy.stats as stats
import numpy as np
normal1 = np.random.normal(loc=0.0, scale=1.0, size=200)
normal2 = np.random.normal(loc=100, scale=1.0, size=200)

在相同样本上使用 KS 和 AD:

sstats.ks_2samp(normal1, normal1)
sstats.anderson_ksamp([normal1, normal1])

分别返回:

# Expected
Ks_2sampResult(statistic=0.0, pvalue=1.0) 
# Not expected
Anderson_ksampResult(statistic=-1.3196852620954158, critical_values=array([ 0.325,  1.226,  1.961,  2.718,  3.752]), significance_level=1.4357209285296726)

在不同的样本上:

sstats.ks_2samp(normal1, normal2)
sstats.anderson_ksamp([normal1, normal2])

分别返回:

# Expected
Ks_2sampResult(statistic=1.0, pvalue=1.4175052453413253e-89)
# Not expected
---------------------------------------------------------------------------
OverflowError                             Traceback (most recent call last)
<ipython-input-757-e3914aaf909c> in <module>()
----> 1 stats.anderson_ksamp([normal1, normal2])

/usr/lib/python3.5/site-packages/scipy/stats/morestats.py in anderson_ksamp(samples, midrank)
   1694         warnings.warn("approximate p-value will be computed by extrapolation")
   1695 
-> 1696     p = math.exp(np.polyval(pf, A2))
   1697     return Anderson_ksampResult(A2, critical, p)
   1698 

OverflowError: math range error
4

1 回答 1

3

我认为这两件事实际上是有道理的。Anderson-Darling 检验中的显着性水平或 p 值是根据检验统计量在临界值范围内的位置推断得出的。检验统计量越靠右,您就越能拒绝它们来自同一分布的原假设。

请注意,对于使用示例分布参数的 80-90 个样本,您会看到测试统计量(对于normal1vs. normal2)开始大大大于最大临界值,这意味着显着性的外推可以自由增长(极大, 作为从polyfit) 到无穷大的上凸二次函数的指数。所以是的,对于大样本量,您将计算一些巨大数字的指数并溢出。换句话说,您的数据显然不是来自同一分布,以至于显着性外推溢出。在这种情况下,您可能会从实际数据中引导较小的数据集,以避免溢出(或引导多次并平均统计数据)。

另一方面,当排序的数据集相同时,看起来公式某些步骤承认负值的可能性。本质上,这意味着统计数据在临界值的左侧很远,表明完美匹配。

再一次,显着性是通过外推计算的,但这次它是从测试统计量外推到最小临界值,而不是像不匹配情况那样从最大临界值推向测试统计量。由于左侧统计数据的相对大小恰好相对于最小临界值(大约 0.3)更小(我看到使用相同样本的统计数据大约为 -1.3),因此您得到的推断是“仅仅“高达 140% 左右,而不是呈指数级增长……但仍然看到 1.4 的显着性值表明数据刚刚超出测试可能相关的范围。

这很可能是因为上面的链接线k - 1从计算的测试统计中减去了“自由度”。在这两个示例中,这意味着减去 1。因此,如果我们将 1 加回您所看到的测试统计量,它会将您置于 0.31 的范围内,这几乎完全等于最低临界值(这就是您所看到的会期望完全相同的数据,这意味着即使在最弱的显着性水平上您也不能拒绝原假设)。因此,可能是自由度调整将其置于频谱的负端,然后被基于二次的 p 值外推法放大。

于 2018-03-06T18:02:45.440 回答