【问题标题】: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.ppfq 值之间的差异。

    【讨论】:

    • 确实如此。不可缺少的。你的定义是正确的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    • 1970-01-01
    • 2014-11-27
    • 2012-03-10
    • 1970-01-01
    • 2012-11-14
    • 2012-05-05
    相关资源
    最近更新 更多