如何测试均匀性

10 投票
1 回答
11112 浏览
提问于 2025-04-18 16:35

我在模拟一个从 0T 的时间范围,这个过程是根据泊松过程来进行的。事件之间的时间是呈指数分布的,我们知道这些时间在 0T 之间应该是均匀分布的。

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)

我只是想测试一下这些点是否是从 0T 的范围内均匀选择的。请问在 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)

撰写回答