gpt4 book ai didi

python - 使用非标准化数据在 Scipy 中进行 Kolmogorov-Smirnov 测试

转载 作者:行者123 更新时间:2023-11-28 18:40:50 25 4
gpt4 key购买 nike

我正在尝试测试值列表是否均匀分布。我知道 Kolmogorov-Smirnov 检验是适合运行的检验。但是,我的结果对我来说没有任何意义。

在下面的代码中,我创建了两个值列表,x 是均匀分布的,y 是非均匀分布的。

应该发生什么:我在 x 和 y 上运行 scipy 的 kstest(),x 的 p 值通过,y 的 p 值没有通过。

发生了什么:我在 x 和 y 上运行 scipy 的 kstest(),x 和 y 的 p 值都是 0.0。

In [1]:

from scipy import stats
import scipy as sp
import numpy as np
import math
import matplotlib.pyplot as plt
%matplotlib inline
In [2]:

x = np.random.uniform(size=1000)
sigma_x = np.std(x)
mean_x = x.mean()

plt.hist(x)
plt.show()

In [3]:

y = x**4
sigma_y = np.std(y)
mean_y = y.mean()

plt.hist(y)
plt.show()

In [4]:

stats.kstest(x, 'uniform', args=(mean_x,sigma_x))
Out[4]:
(0.499, 0.0)
In [5]:

stats.kstest(y, 'uniform', args=(mean_y,sigma_y))
Out[5]:
(0.67400000000000004, 0.0)

最佳答案

您滥用了 args 参数。它并不总是期望的均值和标准差,它是您使用的分布采用的任何参数。在这种情况下,stats.uniform接受两个参数,locscale,并且它“在 locloc + scale 之间是常数。”

所以您不想使用均值和标准差。相反,您需要定义均匀分布的最小值和最大值,args=(0, 1) 如果您想针对已知的均匀分布进行测试,或者 args=(min( x), max(x)) 如果您想使用样本估计。

from scipy import stats
import numpy as np

x = np.random.uniform(size=1000)
y = x**4

stats.kstest(x, 'uniform', args=(0, 1))
# (0.029538499688200326, 0.34247911001793319)

stats.kstest(y, 'uniform', args=c(0, 1))
# (0.50121963249814794, 0.0)

关于python - 使用非标准化数据在 Scipy 中进行 Kolmogorov-Smirnov 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26307202/

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