ele*_*ora 6 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)
return times[1:]
Run Code Online (Sandbox Code Playgroud)
我只想进行一次均匀性测试,例如Kolmogorov-Smirnov测试.然而,我无法解决如何在scipy中做到这一点.如果我做
import random
from scipy.stats import kstest
times = poisson_simul(1, 100)
print kstest(times, "uniform")
Run Code Online (Sandbox Code Playgroud)
这是不对的 .它给了我
(1.0, 0.0)
Run Code Online (Sandbox Code Playgroud)
我只是想测试该点均匀地范围内选择的假设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)
Run Code Online (Sandbox Code Playgroud)