微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kolmogorov-Smirnov 检验统计量

如何解决Kolmogorov-Smirnov 检验统计量

有人能解释一下为什么如果我手动计算 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,4000).cdf)
KstestResult(statistic=0.4722995454382698,pvalue=0.1534647709785294)

解决方法

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

>>> 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。