【发布时间】:2016-10-22 20:11:04
【问题描述】:
我需要构造一个截断指数随机变量,范围在 5 到 7 之间,速率参数等于 0.76。我正在使用 scipy.stats.truncexpon,loc=5 和 scale=1/0.76。我不确定如何指定上限。有什么想法吗?
【问题讨论】:
我需要构造一个截断指数随机变量,范围在 5 到 7 之间,速率参数等于 0.76。我正在使用 scipy.stats.truncexpon,loc=5 和 scale=1/0.76。我不确定如何指定上限。有什么想法吗?
【问题讨论】:
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_continuous。
rv_continuous 类有a and b parameters which define the lower and upper bound 的分布支持。 truncexpon 的 a 参数固定为 0:
truncexpon = truncexpon_gen(a=0.0, name='truncexpon')
因此默认情况下truncexpon 的支持从0 变为b。
Per the docs,
truncexpon.pdf(x, b, loc, scale)是相同的 相当于truncexpon.pdf(y, b) / scale和y = (x - loc) / scale。
所以y 从0 变为b,x 从loc 变为b*scale + loc。
所以要让x 从lower 变为upper,让loc = lower 和b = (upper-lower)/scale。
【讨论】: