使用scipy.stats进行pdf估算

时间:2014-02-24 14:48:20

标签: python statistics scipy

假设我计算了Beta(4,8)的密度:

from scipy.stats import beta
rv = beta(4, 8)
x = np.linspace(start=0, stop=1, num=200)
my_pdf = rv.pdf(x)

为什么pdf的积分不等于1?

> my_pdf.sum()
199.00000139548044

2 个答案:

答案 0 :(得分:2)

pdf上的积分是一个。你可以通过使用scipy

中的数值积分来看到这一点
>>> from scipy.integrate import quad
>>> quad(rv.pdf, 0, 1)
(0.9999999999999999, 1.1102230246251564e-14)

或通过编写自己的ad-hoc集成(在此示例中使用梯形规则)

>>> x = numpy.linspace(start=0, stop=1, num=201)
>>> (0.5 * rv.pdf(x[0]) + rv.pdf(x[1:-1]).sum() + 0.5 * rv.pdf(x[-1])) / 200.0
1.0000000068732813

答案 1 :(得分:1)

rv.pdf会在x的每个值处返回pdf的值。它并不总和,因为你实际上并不是计算积分。如果你想这样做,你需要将你的总和除以间隔的数量,即len(x) - 1,即199.那么你会得到一个非常接近1的结果。