【问题标题】:Python Scipy truncated exponential distributionPython Scipy 截断指数分布
【发布时间】:2016-10-22 20:11:04
【问题描述】:

我需要构造一个截断指数随机变量,范围在 5 到 7 之间,速率参数等于 0.76。我正在使用 scipy.stats.truncexpon,loc=5 和 scale=1/0.76。我不确定如何指定上限。有什么想法吗?

【问题讨论】:

    标签: python scipy


    【解决方案1】:
    import scipy.stats as stats
    import matplotlib.pyplot as plt
    
    lower, upper, scale = 5, 7, 1/0.76
    X = stats.truncexpon(b=(upper-lower)/scale, loc=lower, scale=scale)
    data = X.rvs(10000)
    
    fig, ax = plt.subplots()
    ax.hist(data, normed=True)
    plt.show()
    


    stats.truncexpon 是一个instance of a subclass of rv_continuousrv_continuous 类有a and b parameters which define the lower and upper bound 的分布支持。 truncexpona 参数固定为 0:

    truncexpon = truncexpon_gen(a=0.0, name='truncexpon')
    

    因此默认情况下truncexpon 的支持从0 变为bPer the docs,

    truncexpon.pdf(x, b, loc, scale) 是相同的 相当于truncexpon.pdf(y, b) / scaley = (x - loc) / scale

    所以y0 变为bxloc 变为b*scale + loc。 所以要让xlower 变为upper,让loc = lowerb = (upper-lower)/scale

    【讨论】:

    • 感谢您的回答!问题在于,当我将比例设置为 1 以外的值时,对我的分布的支持会发生变化,并且不再是从下到上(它从下开始但不会在上结束)。
    • 对。我已经修改了代码以考虑规模的变化。