我根据泊松过程模拟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的?
答案 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)