我需要构造一个截断指数随机变量,范围在 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()
Run Code Online (Sandbox Code Playgroud)
stats.truncexpon是的子类的实例rv_continuous。该类rv_continuous具有定义分布支持的下限和上限的参数a。btruncexpon将a参数固定为 0:
truncexpon = truncexpon_gen(a=0.0, name='truncexpon')
Run Code Online (Sandbox Code Playgroud)
因此默认情况下truncexpon的支持是从0到b。
根据文档,
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。