我想将成对的样本与 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