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

scipy.stats.norm.interval返回inf

如何解决scipy.stats.norm.interval返回inf

我有很多数据点和一个模型,我现在正在寻找可以排除该模型的置信度。

我从卡方值开始,再加上自由度数。

使用scipy,我一直在尝试以下内容

from scipy.stats import chi2
from scipy.stats import norm

chisq = 74.1
df = 21 #degrees of freedom

cdf = chi2.cdf(chisq,df,scale=1)
sigma = norm.interval(cdf)

这将产生我想要的输出(5.5 sigma置信度),但是对于较高的chi ^ 2值将失败。

在我看来,问题在于scipy使用的数据类型的精度。对于chi ^ 2值334.7(和相同的自由度数),chi2.cdf得出1.0,这又使norm.interval返回-inf / inf。最好返回16.1的西格玛置信度。

我找到了一种使用mpmath提高cdf精度的方法

import mpmath

mpmath.mp.dps = 200 # decimal digits of precision

def cdf(x,k):
    x,k = mpmath.mpf(x),mpmath.mpf(k)
    return mpmath.gammainc(k/2,x/2,regularized=True)

但是,问题仍然存在,因为scipy.stats.norm.interval将输入舍入为1.0。

是否有一种方法可以通过更改数据类型norm.interval的使用来规避此问题,或者是否有其他方法/软件包来计算具有任意精度输入的正态分布的端点?

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