【问题标题】:Scipy normal PDF summing to values larger than 1Scipy 正常 PDF 求和大于 1 的值
【发布时间】:2021-03-31 02:56:56
【问题描述】:
我正在使用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))
【问题讨论】:
标签:
python
scipy
statistics
probability-density
【解决方案1】:
您的定义应稍作调整:根据定义,整个空间上概率密度函数的积分应等于 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.ppf 的q 值之间的差异。