为什么scipy.norm.pdf有时会给出大于1的概率密度函数?如何进行修正?

18

已知高斯(正态)随机变量的均值和方差,我想计算其概率密度函数(PDF)。

enter image description here

我参考了这篇文章:Calculate probability in normal distribution given mean, std in Python,

还有scipy文档:scipy.stats.norm

但是当我绘制曲线的PDF时,概率超过1!请参考此最小工作示例:

import numpy as np
import scipy.stats as stats

x = np.linspace(0.3, 1.75, 1000)
plt.plot(x, stats.norm.pdf(x, 1.075, 0.2))
plt.show()
这是我得到的结果:

我得到了什么:

高斯概率密度曲线

如何可能获得200%的概率得到平均值1.075?我是否在这里有任何误解?有没有办法纠正这个问题?


我确实这样做了,@talonmies。norm.pdf本身用于标准化随机变量,因此它计算exp(-x**2/2)/sqrt(2*pi)。为了将mu和sigma引入关系中,分别引入了loc和scale。指定这些意味着用(x-loc)/scale替换x,并将最终结果除以scale,从而形成上述所述的高斯PDF。 - Ébe Isaac
3个回答

32

这不是一个错误,也不是一个错误的结果。概率密度函数在某个特定点的值并不能给你概率;它是测量分布在该值周围的密度的一种指标。对于连续型随机变量,在给定点上的概率为零。我们计算的不是p(X = x),而是p(x1 < X < x2)之间的概率,它等于该概率密度函数下面的面积。概率密度函数的值可以很好地超过1。甚至可能趋近于无穷大。


8
概括翻译:概率密度函数在一个区间上的积分等于1,但是概率密度函数本身可能高于1、低于1或为0,当然不能为负数。 详细翻译:概率密度函数在一个特定的区间上的积分结果等于1。但是,概率密度函数本身可能会超过1或低于1,也有可能是0,但是它不能为负数。 - Severin Pappadeux
4
一般来说,我认为大多数初级(大学水平)概率与统计教材没有讨论这些问题,如果没有接触实分析、测度和黎曼求和,很难发展出直觉。我发现这篇文章是一个简单易懂的入门介绍:http://www.statsathome.com/2017/06/26/measure-theory-made-ridiculously-simple/ - AruniRC

2

这是一个密度函数,而不是质量函数

如果方差小于1 /(2 * pi),高斯函数将超过1.0

超过1仅对质量函数有限制,而对密度函数没有限制


0
概率密度是累积概率的变化速率。因此,当累积概率迅速增加时,密度可以轻松超过1。但是,如果我们计算密度函数下的面积,它永远不会超过1。这样的区域也被称为概率质量。
以您的示例为例:
from statistics import mean, stdev        
import numpy as np


x, dx = np.linspace(0.3, 1.75, 1000, retstep=True)
mean_1, sigma_1 = mean(x), stdev(x)
f = np.exp(-((x-mean_1)/sigma_1)**2/2) / sigma_1 / np.sqrt(2 * np.pi)
print(np.sum(f)*dx)

输出结果为0.916581457225367

感谢Richard McElreath在他的书《统计重新思考》中提供的帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接