【问题标题】:Wrong cummulative distribution obtained from integrating the PDF通过集成 PDF 获得的错误累积分布
【发布时间】:2020-04-06 15:28:17
【问题描述】:

我有一个 PDF(代码如下),我正在尝试获取它的 cummulative distribution function (CDF)。我可以使用标准方法将 PDF 从 0.(它是允许的最小值)集成到增加 x 值。这按预期工作:

PDF 为红色,“逐步”CDF 为蓝色。但这给我留下了一张(x, y) 数据表,我想要描述这个CDF 的实际函数。所以我转而将 PDF 从 0. 到变量 y 进行积分以获得这个表达式。我这样做with WolframAlpha (WA) 我发现:

我使用upper incomplete gamma function 将此函数写入我的代码中,我得到了这个:

WA 集成 CDF 为橙色。我尝试了较低的不完全伽马函数,但结果更糟。

我很确定 WA CDF 的编写没有错误,所以我不确定我在这里做错了什么。

import numpy as np
from scipy.special import gamma, gammaincc
from scipy import integrate
import matplotlib.pyplot as plt

def main():
    xx = np.linspace(0., 5., 100)
    yy = PDF(xx)
    plt.plot(xx, yy, c='r')

    # Find stepwise CDF
    cummul = []
    for x in xx:
        cummul.append([x, integrate.quad(PDF, 0., x)[0]])
    plt.plot(*np.array(cummul).T)

    # WolframAlpha's integral
    y = CDF(xx)
    plt.plot(xx, y)


def PDF(y):
    a = (343. / 15.) * np.sqrt(7. / (2. * np.pi))
    b, c = 5. / 2., -7. / 2.
    return a * (y ** b) * np.exp(c * y)


def CDF(x):
    """
    From WolframAlpha
    """
    a = (343. / 15.) * np.sqrt(7. / (2. * np.pi))
    b, c = 5. / 2., -7. / 2.
    return a * (
        x**b * (-c * x)**(-b) * (gammaincc(b + 1, -c * x) - b * gamma(b))) / c

if __name__ == '__main__':
    main()

【问题讨论】:

    标签: python scipy cdf


    【解决方案1】:

    scipy.special.gammaincc正则化上不完全伽马函数。如果不完全 gamma 函数是 gamma(a, x),则正则化的不完全 gamma 函数是 gamma(a, x)/gamma(a)。 WA 公式中的不完全 gamma 函数不是正则化版本。如果将gammaincc(b + 1, -c * x) 乘以gamma(b + 1),您将得到预期的结果。即把return语句改成

        return a * (
            x**b * (-c * x)**(-b) * (gamma(b + 1) * gammaincc(b + 1, -c * x) - b * gamma(b))) / c
    

    也可以写

        return a * (
            x**b * (-c * x)**(-b) * gamma(b + 1) * (gammaincc(b + 1, -c * x) - 1)) / c
    

    如果我使用后一个版本,并将 Wolfram Alpha 积分的图更改为

        plt.plot(xx, y, '--', linewidth=4, alpha=0.6)
    

    我明白了这个情节:

    【讨论】:

    • 优秀的回答沃伦,谢谢! scipy的预定义函数中的那些小细节我需要多加注意。
    猜你喜欢
    • 2012-05-25
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多