gpt4 book ai didi

python - k样本的scipy Anderson-Darling测试中的数学溢出错误

转载 作者:太空宇宙 更新时间:2023-11-03 11:17:32 44 4
gpt4 key购买 nike

我想将样本对与 Kolmogorov-Smirnov (KS) 和 Anderson-Darling (AD) 检验进行比较。我分别使用 scipy.stats.ks_2sampscipy.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

最佳答案

我认为这两件事实际上是有道理的。 Anderson-Darling 检验中的显着性水平或 p 值 is extrapolated based on where the test statistic falls within the range of critical values .检验统计量越靠右,您就越能拒绝原假设,即它们来自同一分布。

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

另一方面,当排序的数据集相同时,它看起来像 some stepsformula承认负值的可能性。从本质上讲,这意味着统计数据远在临界值的左侧,表示完美匹配。

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

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

关于python - k样本的scipy Anderson-Darling测试中的数学溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49136617/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com