R语言chisq.test执行本福特法则拟合优度检验结果异常求解
问题原因解析
- 核心问题出在你使用的理论概率向量
th是四舍五入截断后的近似值,不是本福特法则对应的精确理论概率。
本福特法则首位数字d(d=1~9)的精确理论概率为log10(1 + 1/d),你使用的三位小数近似值虽然看起来误差很小,但卡方拟合优度检验对大样本下的微小系统偏差非常敏感:你的总样本量超过4000,近似概率带来的偏差被放大,最终得到了偏小的p值。 chisq.benftest返回结果符合预期的原因是该函数内部直接调用了本福特法则的精确理论概率计算逻辑,没有使用你手动传入的截断近似值,因此检验结果准确。
修正方法
首先生成精确的本福特理论概率向量,不要手动写近似值,再重新执行检验即可:
# 生成1-9首位数字对应的精确本福特概率 th_exact <- log10(1 + 1/1:9) # 重新执行卡方检验 chisq.test(prop, p = th_exact)
运行上述代码后得到的p值会和chisq.benftest返回的0.7542一致,符合你的预期。如果一定要手动指定理论概率,需要保留足够的小数位,避免截断误差对大样本检验结果的干扰。
内容的提问来源于stack exchange,提问作者Elysé Barbaza
相关产品推荐
相关产品推荐

