关于Scipy中非中心卡方分布实现的准确性问询
Scipy非中心卡方分布在大非中心参数下的准确性问题
如果你用过Scipy里的非中心卡方分布相关工具,大概率会碰到一个问题:当非中心参数取值较大时,计算结果的准确性会严重下降。具体来说,scipy.stats.ncx2和scipy.special.chndtr这两个实现是基于Abramowitz和Stegun所著《手册》中的公式26.4.25,但这个公式在大非中心参数场景下并不适用。
给你看个实际的例子,运行这段代码:
from scipy.stats import ncx2 print(ncx2.cdf(1200,2,1000)) print(ncx2.cdf(1500,2,1000)) print(ncx2.cdf(2000,2,1000)) print(ncx2.cdf(5000,2,1000))
得到的结果是:
0.998604279948 0.999933004449 0.999933004449 0.999933004449
明显能看出来问题:从ncx2.cdf(1500,2,1000)开始,结果就完全停滞了,不再随x值增大而趋近于1。这显然不符合非中心卡方分布CDF的特性,足以说明当前实现在大非中心参数下的计算逻辑存在缺陷。
内容的提问来源于stack exchange,提问作者pyguy
相关产品推荐
相关产品推荐

