当我的自由度为726 logf时,我的t得分为69.667。
>>> scipy.stats.t.logsf(69.667, 726)
-744.4400719213812
但是在df = 727时,我得到以下信息
>>> scipy.stats.t.logsf(69.667, 727)
-inf
有人可以解释我如何达到这里的人数限制吗?我使用日志生存功能的原因是为了避免此问题。还有其他方法可以解决此问题吗?
答案 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中的所有数字都抱有太大的信心。