2016-10-20 2 views
0

Мне нужно построить усеченную экспоненциальную случайную величину, ограниченную между 5 и 7, с параметром скорости, равным 0,76. Я использую scipy.stats.truncexpon, с loc = 5 и scale = 1/0.76. Однако я не уверен, как указать верхнюю границу. Есть идеи?Python Scipy усеченное экспоненциальное распределение

ответ

3
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() 

enter image description here


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 «s идет от 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.

+0

Спасибо за ответ! Проблема в том, что, когда я устанавливаю масштаб в значение, отличное от единицы, поддержка моего распределения изменяется и больше не от нижнего к верхнему (начинается от нижнего, но не заканчивается вверх). –

+0

Справа. Я пересмотрел код, чтобы принять во внимание изменение масштаба. – unutbu

+0

Ваш ответ впечатляет. Отлично сработано. –

Смежные вопросы