scipy.stats.t.logsf无限值

时间:2019-04-28 17:20:04

标签: python scipy

当我的自由度为726 logf时,我的t得分为69.667。

>>> scipy.stats.t.logsf(69.667, 726)
-744.4400719213812

但是在df = 727时,我得到以下信息

>>> scipy.stats.t.logsf(69.667, 727)
-inf

有人可以解释我如何达到这里的人数限制吗?我使用日志生存功能的原因是为了避免此问题。还有其他方法可以解决此问题吗?

1 个答案:

答案 0 :(得分:0)

SciPy中的implementation of the t distribution不会覆盖_logsf方法,因此它默认用于计算sf函数的日志:

In [24]: t.sf(69.667, [726, 727])                                                                                                                                    
Out[24]: array([5.e-324, 0.e+000])

In [25]: np.log(t.sf(69.667, [726, 727]))                                                                                                                            
/.../ipython:1: RuntimeWarning: divide by zero encountered in log

Out[25]: array([-744.44007192,          -inf])

顺便说一句,5e-324是最小幅度的非零64位浮点数(它是denormal number),因此结果只有1位精度。不要对t.logsf(69.667, 726)返回的-744.44007192中的所有数字都抱有太大的信心。