Scipy 正常 PDF 求和大于 1 的值

Scipy normal PDF summing to values larger than 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))

你的定义应该稍微调整一下:根据定义,概率密度函数在整个 space 上的积分 应该等于 1。如果你想使用 Riemann sum 来近似这个积分,您应该将这些值乘以 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,传递给 norm.ppfq 值之间的差异。