如何测试均匀性
我在模拟一个从 0
到 T
的时间范围,这个过程是根据泊松过程来进行的。事件之间的时间是呈指数分布的,我们知道这些时间在 0
到 T
之间应该是均匀分布的。
def poisson_simul(rate, T):
time = random.expovariate(rate)
times = [0]
while (times[-1] < T):
times.append(time+times[-1])
time = random.expovariate(rate)
return times[1:]
我想简单地进行一个均匀性测试,比如 Kolmogorov-Smirnov 测试。不过我不知道怎么在 scipy 里实现这个测试。如果我这样做
import random
from scipy.stats import kstest
times = poisson_simul(1, 100)
print kstest(times, "uniform")
结果就不对。它给我的结果是
(1.0, 0.0)
我只是想测试一下这些点是否是从 0
到 T
的范围内均匀选择的。请问在 scipy 里该怎么做呢?
1 个回答
12
你需要给均匀分布提供一些参数,这样 kstest()
才知道你指的是从0到100的均匀分布。如果你只写 'uniform'
,它会默认使用0到1的范围,而你的数据显然不在这个范围内。最简单明了的方法是直接指定累积分布函数(CDF),而不是用字符串来表示:
[~]
|11> from scipy import stats
[~]
|12> times = poisson_simul(1.0, 100.0)
[~]
|13> stats.kstest(times, stats.uniform(loc=0.0, scale=100.0).cdf)
(0.047464592615975507, 0.98954417186125665)