我如何以共形方式使用scipy.stats.kde.gaussian_kde
和{
例如,代码:
from numpy import inf
import scipy.stat
my_pdf = scipy.stats.kde.gaussian_kde(sample)
scipy.stats.kstest(sample, lambda x: my_pdf.integrate_box_1d(-inf, x))
给出以下答案:
(0.5396735893479544, 0.0)
这是不正确的,因为一个样本显然属于构建在这个样本上的分布。在
首先,如果两个样本可能来自同一分布,正确的测试方法是two-sample KS test,在{a2}中实现,它直接比较经验cdf。KDE是一种密度的估计,它可以平滑CDF,因此从统计学上讲,这是一堆不必要的工作,也会使你的估计变得更糟。在
但您看到这个问题的原因是CDF参数的签名不太正确。
kstest
调用cdf(vals)
(source),其中vals
是已排序的样本,以获得每个样本的CDF值。在您的代码中,这最后调用了my_pdf.integrate_box_1d(-np.inf, samps)
,但是integrate_box_1d
希望这两个参数都是标量。签名是错误的,如果您在大多数数组中尝试此操作,它将以ValueError
崩溃:但不幸的是,当第二个参数是
^{pr2}$samp
时,它可以很好地广播,因为数组是相同的形状,然后一切都会变糟。假定integrate_box_1d
应该检查其参数的形状,但有一种方法可以正确地执行此操作:如果您喜欢,也可以使用^{} 。在
(但是,您可能确实想使用
ks_2samp
。)相关问题 更多 >
编程相关推荐