You need to enable JavaScript to run this app. 为何手动计算Kolmogorov-Smirnov检验统计量与scipy.stats.kstest结果不一致?
优惠活动
大模型
产品
解决方案
定价
更多

为何手动计算Kolmogorov-Smirnov检验统计量与scipy.stats.kstest结果不一致?

手动计算与scipy结果差异的核心原因

两者结果不一致的本质是你手动计算时,遗漏了Kolmogorov-Smirnov检验统计量要求纳入计算的一类差值,scipy的计算完全符合标准检验定义。

KS统计量的计算规则

对于连续的理论累积分布函数(CDF),KS检验的统计量D是经验累积分布函数(ECDF)与理论CDF在全定义域上的最大垂直绝对距离。由于ECDF是仅在样本点处跳变的阶梯函数、连续理论CDF全程无突变,这个最大差值只会出现在每个样本点的两个相邻位置:

  • 样本点跳变后的右侧:ECDF值为i/n(i为当前样本在升序排列中的位次,n为样本量),对应差值为 abs(i/n - F(x_i))
  • 样本点跳变前的左侧:ECDF值为(i-1)/n,对应差值为 abs((i-1)/n - F(x_i))

结合你的计算过程的具体拆解

  • 你手动计算时,仅取了ECDF跳变后的取值[0.2, 0.4, 0.6, 0.8, 1]和对应样本点的Weibull CDF做差,得到的最大差值0.3455,实际是最后一个样本x=5000位置的差值:ECDF跳变后为1,对应Weibull CDF值约为0.6545,两者差为0.3455。
  • 你完全遗漏了样本点左侧的ECDF差值计算:对于你的5个升序样本,左侧ECDF取值为[0, 0.2, 0.4, 0.6, 0.8]。在第一个样本x=1000的位置,左侧ECDF值为0,对应Weibull CDF值约为0.4723,两者的绝对差值达到0.4723,这就是scipy返回的统计量结果,比你手动算出的最大值更大。

scipy的kstest在实现时会自动同时遍历上述两类差值,取所有绝对差的最大值作为最终统计量,不存在计算偏差。

内容的提问来源于stack exchange,提问作者Elise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 14:06:02