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 值之间的差异。