Python 如何测试均匀性

Python 如何测试均匀性,python,statistics,scipy,Python,Statistics,Scipy,我根据泊松过程模拟从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) retu

我根据泊松过程模拟从
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:]
这是不对的。它给了我

(1.0, 0.0)

我只想检验一个假设,即点是从
0
T
的范围内均匀选择的。如何在scipy中执行此操作?

您需要提供均匀分布的参数,以便让
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)

非常感谢。您似乎不必指定有多少点是有趣的,它只是查看输入。严格地说,Kolmogorov-Smirnov测试是测试您提供的N个数据点是否足够像从给定分布中提取的N个数据点。它不知道这些数据是由具有基于时间的截止点而不是基于数字的截止点的点过程生成的时间。如果区别对你很重要,你需要一个不同的统计测试。谢谢。我最近读到Kolmogorov-Smirnov测试不是测试一致性的好选择。您是否知道有任何更强大的测试可以在python中使用?
[~]
|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)