如何测试均匀性

时间:2014-08-08 16:53:51

标签: python statistics scipy

我根据泊松过程模拟0到T范围内的时间。事件间时间是指数级的,我们知道时间的分布在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 个答案:

答案 0 :(得分:7)

您需要提供统一分布的参数,让kstest()知道它是从0到100的均匀分布。如果只指定'uniform',则默认边界为0到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)