a
— это форма. То, что вы пробовали, работает только в том случае, когда loc = 0
. Сначала мы начнем с двух примеров, с формой (или a
) = 10 и масштабом = 5, а второй d1plus50 отличается от первого на 50, и вы можете увидеть сдвиг, который диктуется loc:
from scipy.stats import gamma
import matplotlib.pyplot as plt
d1 = gamma.rvs(a = 10, scale=5,size=1000,random_state=99)
plt.hist(d1,bins=50,label='loc=0,shape=10,scale=5',density=True)
d1plus50 = gamma.rvs(a = 10, loc= 50,scale=5,size=1000,random_state=99)
plt.hist(d1plus50,bins=50,label='loc=50,shape=10,scale=5',density=True)
plt.legend(loc='upper right')
![введите здесь описание изображения](https://i.stack.imgur.com/PtYqr.png)
Таким образом, у вас есть 3 параметра для оценки данных, один из способов — использовать gamma.fit, мы применяем это к смоделированному распределению с loc=0:
xlin = np.linspace(0,160,50)
fit_shape, fit_loc, fit_scale=gamma.fit(d1)
print([fit_shape, fit_loc, fit_scale])
[11.135335235456457, -1.9431969603988053, 4.693776771991816]
plt.hist(d1,bins=50,label='loc=0,shape=10,scale=5',density=True)
plt.plot(xlin,gamma.pdf(xlin,a=fit_shape,loc = fit_loc, scale = fit_scale)
![введите здесь описание изображения](https://i.stack.imgur.com/hV3Yy.png)
И если мы сделаем это для распределения, которое мы смоделировали с помощью loc, и вы увидите, что loc оценивается правильно, а также форма и масштаб:
fit_shape, fit_loc, fit_scale=gamma.fit(d1plus50)
print([fit_shape, fit_loc, fit_scale])
[11.135287555530564, 48.05688649976989, 4.693789434095116]
plt.hist(d1plus50,bins=50,label='loc=0,shape=10,scale=5',density=True)
plt.plot(xlin,gamma.pdf(xlin,a=fit_shape,loc = fit_loc, scale = fit_scale))
![введите здесь описание изображения](https://i.stack.imgur.com/9qESE.png)
person
StupidWolf
schedule
08.11.2020