gpt4 book ai didi

python - 使用参数进行 K-S 测试并了解结果的问题

转载 作者:行者123 更新时间:2023-12-01 08:41:12 24 4
gpt4 key购买 nike

我正在尝试对一些数据运行 K-S 测试。现在我的代码可以工作,但我不确定我是否理解发生了什么,并且在尝试设置 loc 时我也收到错误。基本上我得到了 KS 和 P 检验值。但我不确定我是否完全掌握了它,是否足以使用结果。

我正在使用 scipy.stats.ks_2samp 模块找到 here

这是我正在运行的代码

from scipy import stats

np.random.seed(12345678) #fix random seed to get the same result
n1 = len(low_ni_sample) # size of first sample
n2 = len(high_ni_sample) # size of second sample

# Scale is standard deviation
scale = 3

rvs1 = stats.norm.rvs(low_ni_sample[:,0], size=n1, scale=scale)
rvs2 = stats.norm.rvs(high_ni_sample[:,0], size=n2, scale=scale)
ksresult = stats.ks_2samp(rvs1, rvs2)
ks_val = ksresult[0]
p_val = ksresult[1]

print('K-S Statistics ' + str(ks_val))
print('P-value ' + str(p_val))

这给出了:

K-S Statistics 0.04507948306145837
P-value 0.8362207851676332

现在,对于我见过的那些示例,loc 添加如下:

rvs1 = stats.norm.rvs(low_ni_sample[:,0], size=n1, loc=0., scale=scale)
rvs2 = stats.norm.rvs(high_ni_sample[:,0], size=n2, loc=0.5, scale=scale)

但是,如果我这样做,我会收到此错误:

Traceback (most recent call last):

File "<ipython-input-342-aa890a947919>", line 13, in <module>
rvs1 = stats.norm.rvs(low_ni_sample[:,0], size=n1, loc=0., scale=scale)

File "/home/kongstad/anaconda3/envs/tensorflow/lib/python3.6/site-packages/scipy/stats/_distn_infrastructure.py", line 937, in rvs
args, loc, scale, size = self._parse_args_rvs(*args, **kwds)

TypeError: _parse_args_rvs() got multiple values for argument 'loc'

这是一个快照,显示了正在使用的两个数据集的内容。low_ni_sample,high_ni_sample。 enter image description here

所以我的问题是:

  1. 为什么我不能添加 loc 值?它代表什么?
  2. 改变比例会显着改变结果,为什么以及应该怎样做?
  3. 我该如何以一种有意义的方式来绘制这个图?

运行 Silma 的建议后,我偶然发现了一个新错误。

from scipy import stats

np.random.seed(12345678) #fix random seed to get the same result
n1 = len(low_ni_sample) # size of first sample
n2 = len(high_ni_sample) # size of second sample

# Scale is standard deviation
scale = 3

ndist = stats.norm(loc=0., scale=scale)

rvs1 = ndist.rvs(low_ni_sample[:,0],size=n1)
rvs2 = ndist.rvs(high_ni_sample[:,0],size=n2)

#rvs1 = stats.norm.rvs(low_ni_sample[:,2], size=n1, scale=scale)
#rvs2 = stats.norm.rvs(high_ni_sample[:,2], size=n2, scale=scale)
ksresult = stats.ks_2samp(rvs1, rvs2)
ks_val = ksresult[0]
p_val = ksresult[1]

print('K-S Statistics ' + str(ks_val))
print('P-value ' + str(p_val))

出现此错误消息

    rvs1 = ndist.rvs(low_ni_sample[:,0],size=n1)

TypeError: rvs() got multiple values for argument 'size'

最佳答案

该错误来自于您应该在使用正态分布之前首先创建一个实例:

ndist = stats.norm(loc=0., scale=scale)

然后做

rvs1 = ndist.rvs(size=n1)

生成从以 0 为中心且具有标准差规模的正态分布中抽取的 n1 个样本。因此,该位置是您的分布的平均值。

更改比例会改变分布的方差(您会获得更多的变异性),因此这显然会影响 KS 测试...

至于绘图,我不确定我明白你的意思...如果你想绘制直方图,那么就这样做

import matplotlib.pyplot as plt
plt.hist(rvs1)
plt.show()

或者更好的是,安装seaborn并使用它们的distplot methods ,例如 KDE。

总的来说,我建议您在继续之前尝试阅读更多有关发行版和 KS 测试的内容,例如参见 wikipedia page .

编辑上面显示的代码用于从标准分布生成随机样本(我认为这是您的目标,与您的样本进行比较)。

如果您想要做的是直接比较两个样本数据,那么您所需要的就是

ksresult = stats.ks_2samp(low_ni_sample[:,0], high_ni_sample[:,0])

再次,假设 low_ni_sample[:,0]high_ni_sample[:,0] 是包含许多感兴趣数量测量值的一维数组,参见。 ks_2samp documentation

关于python - 使用参数进行 K-S 测试并了解结果的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53484481/

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