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

Scipy 普通 PDF 求和值大于 1

如何解决Scipy 普通 PDF 求和值大于 1

我正在处理 scipy.stats.norm PDF。我想知道我是否做错了什么(也许是),因为正态分布上的 PDF 之和返回的值大于 1,并且根据定义,概率密度函数的总和应为 1。我会如果总和为 ~0.99(因为我没有对间隔中的所有值求和),那就可以了,但 20 不太可接受。下面显示一个最小示例

from scipy.stats import norm
lower_bound = norm.ppf(0.01)
upper_bound = norm.ppf(0.99)
N = 100
x = np.linspace(lower_bound,upper_bound,100)
P = norm.pdf(x) 
print(np.sum(P))

解决方法

您的定义应该稍作调整:根据定义,整个空间的概率密度函数的积分应该等于 1。如果您想使用 {{3} },您应该将这些值乘以 x 值之间的间距。然后你会看到结果更接近于 1:

>>> import numpy as np
>>> from scipy.stats import norm
>>> lower_bound = norm.ppf(0.01)
>>> upper_bound = norm.ppf(0.99)
>>> N = 100
>>> x,step = np.linspace(lower_bound,upper_bound,N,retstep=True)
>>> P = norm.pdf(x)
>>> print(np.sum(P * step))
0.9812297466603901

确切的结果(您可以通过增加 N 来更接近地近似)应该是 0.98,即传递给 qnorm.ppf 值之间的差异。

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