【问题标题】:How to test for uniformity如何测试均匀性
【发布时间】:2014-08-09 02:31:17
【问题描述】:

我根据泊松过程模拟了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 中做到这一点?

【问题讨论】:

    标签: python statistics scipy


    【解决方案1】:

    你需要提供均匀分布的参数,让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 中使用的更强大的测试?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2023-03-27
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多