我感兴趣的是检查样本A (n=25)是否均匀分布。下面是我在Python中检查的方法:
import scipy.stats as ss
A=[9,9,9,4,9,6,7,8,9,4,5,2,4,9,6,7,3,4,2,4,5,6,8,9,9]
ss.kstest(A,'uniform', args=(min(A),max(A)), N=25)它返回:(0.22222222222222221,0.14499771178796239),即p值为~0.15时,检验不能拒绝样本A来自均匀分布。
现在这就是我如何在R中计算相同的:
A=c(9,9,9,4,9,6,7,8,9,4,5,2,4,9,6,7,3,4,2,4,5,6,8,9,9)
ks.test(A,punif,min(A),max(A))结果:d= 0.32,p-value = 0.01195。对于R,人们应该在0.05的通常显著性水平上拒绝零假设(!)
如果我没看错文档,这两个函数都默认执行双边测试。另外,我知道KS检验主要用于连续变量,但这能解释Python和R产生的对比近似吗?或者,我是不是在语法上犯了一些明显的错误?
发布于 2017-09-20 01:19:11
scipy.stats中任何cdf的参数都是location和scale。对于均匀分布,这是loc =最小x值,其中均匀密度为1,比例是均匀密度为1的区间的宽度。在python中使用args = (min(A),max(A)-min(A))将得到由R给出的D值。
P值仍然是不同的。这是由于KS测试对重复值的鲁棒性不强。它旨在用于连续分布,并且期望不会出现重复的y值。在存在重复数据的情况下,使用不同的算法来尝试估计p。如果在不重复的情况下对另一个数据样本重新运行代码,并将args设置为loc和scale,那么在R和Python中应该会得到相同的p值。
https://stackoverflow.com/questions/40302558
复制相似问题