【问题标题】:Kolmogorov-Smirnov Test StatisticKolmogorov-Smirnov 检验统计量
【发布时间】:2021-06-18 03:19:43
【问题描述】:

有人能解释一下为什么,如果我手动计算 KS 检验统计量,结果与我使用 scipy.stats.kstest 时的结果不同吗?

>>> sample = np.array([1000,2000,2500,3000,5000])
>>> ecdf = np.array([0.2, 0.4, 0.6, 0.8, 1. ])
>>> cdf = stats.weibull_min(0.3, 100, 4000).cdf(sample)
>>> abs(ecdf - cdf).max()
0.3454961536273503

>>> stats.kstest(rvs=sample, cdf=stats.weibull_min(0.3, 100, 4000).cdf)
KstestResult(statistic=0.4722995454382698, pvalue=0.1534647709785294)

【问题讨论】:

  • 对此进行调查的一种方法是将 Weibull cdf 绘制为平滑线,将经验 cdf 绘制为阶梯式,看看最大的区别是什么。也许为了更容易思考,尝试使用均值 0 和方差 1 的高斯 cdf,然后尝试不同的均值和方差,然后尝试 Weibull。重点是从非常简单的事情开始,然后逐步增加复杂性。

标签: scipy statistics


【解决方案1】:

好的,我意识到我犯的错误,所以我会回答我的问题。 KS-Statistic 不能计算为abs(ecdf - cdf).max(),因为 ECDF 的右连续性/左不连续性。正确的做法是:

>>> sample = np.array([1000, 2000, 2500, 3000, 5000])
>>> ecdf = np.array([0, 0.2, 0.4, 0.6, 0.8, 1. ])
>>> cdf = stats.weibull_min(0.3, 100, 4000).cdf(sample)
>>> max([(ecdf[1:] - cdf).max(), (cdf - ecdf[:-1]).max()])
0.4722995454382698

【讨论】:

    猜你喜欢
    • 2015-03-25
    • 2014-09-21
    • 1970-01-01
    • 2014-12-30
    • 2015-02-01
    • 2020-10-12
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多