我有兴趣检查假设样本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.22222222222222222222221,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值= 0.01195。对于R,我们应该在通常的显著性水平0.05 (!!)
下拒绝原假设。如果我正确阅读了文档,两个函数都默认执行双侧测试。此外,我知道KS测试主要用于连续变量,但这能解释Python和R产生的对比近似吗?或者,我是否在语法上犯了一些明显的错误?
scipy中任意cdf的参数。统计是指地点和规模。对于均匀分布,loc =最小x值,其中均匀密度为1,尺度是均匀密度为1的间隔的宽度。在python中使用args = (min(A), max(A)-min(A))将给出r给出的d值。
p值仍然不同。这是由于KS检验对重复值不具有鲁棒性。它旨在用于连续分布,并且期望不会出现重复的y值。在存在重复数据的情况下,使用不同的算法来尝试估计p。如果您在另一个数据样本上重新运行代码而不重复,并将参数设置为loc和scale,那么您应该在R和Python中获得相同的p值。