太远当试图获得一个截断正态分布的概率密度函数:截断法线当“A”和“B”是按照平均
from scipy.stats import truncnorm
truncnorm.pdf(-31, np.inf, -30, loc=0, scale=1)
它工作正常。但是,如果上界的距离太远的平均值,在未截断侧分配给样品的概率(那里的总质量应是1)为NaN:
# -41 is one of the points with highest probability. Why nan?
>truncnorm.pdf(-41, np.inf, -40, loc=0, scale=1)
nan
# 39 is impossible since it lays in the truncated side
>truncnorm.pdf(-39, np.inf, -40, loc=0, scale=1)
0.0
是否有错误由于数值精确度问题还是什么? 有没有另一种方法来做到这一点?
更新1(其中R库 “truncnorm”):
这似乎是一个常见的问题。同样的问题R “truncnorm” 库:
> dtruncnorm(-41, a=-Inf, b=-40, mean = 0, sd = 1)
[1] NaN
更新2(其中R库 “MSM”):
在他的博客,基督教罗伯特pointed out的 “MSM” 库,实现了他的paper 。
然而,它缩短为这种情况下:
> dtnorm(-41, mean = 0, sd=1, lower=-Inf, upper=-40)
[1] NaN
我看起来像这个问题可以给一些提示。看起来这个函数并没有被认为能够以很高的数值精度工作:https://github.com/scipy/scipy/issues/1489 – alberto
这也是R truncnorm库的一个问题,甚至在使用近似值时,请参阅Christian Roberts的帖子:http://xianblog.wordpress.com/2013/04/09/painful-truncnorm/ – alberto