Что такое параметр a в библиотеке scipy.stats.gamma

Я пытаюсь подогнать Gamma CDF, используя scipy.stats.gamma, но я не знаю, что такое параметр a и как рассчитываются параметры местоположения и масштаба. Разная литература дает разные способы их расчета, и это очень разочаровывает. Я использую приведенный ниже код, который не дает правильного CDF. Заранее спасибо.

from scipy.stats import gamma 
loc = (np.mean(jan))**2/np.var(jan)
scale = np.var(jan)/np.mean(jan)
Jancdf  = gamma.cdf(jan,a,loc = loc, scale = scale)

person Vishal singh rajpoot    schedule 08.11.2020    source источник
comment
docs.scipy.org/doc/scipy/reference /сгенерировано/ не помогает?   -  person mkrieger1    schedule 08.11.2020
comment
Ответ ниже разрешил мои сомнения. Спасибо за комментарий.   -  person Vishal singh rajpoot    schedule 10.11.2020


Ответы (1)


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')

введите здесь описание изображения

Таким образом, у вас есть 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)

введите здесь описание изображения

И если мы сделаем это для распределения, которое мы смоделировали с помощью 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))

введите здесь описание изображения

person StupidWolf    schedule 08.11.2020
comment
Спасибо за быстрый ответ. Это почти решило мою проблему. Есть одно маленькое сомнение. Я думал, что входной массив для соответствия гамма-распределению (gamma.pdf(xlin,a=fit_shape,loc = fit_loc, scale = fit_scale)) должен быть d1 (данные для подгонки) вместо xlin, но это неверно. Можете ли вы сказать мне немного больше, чтобы очистить все? - person Vishal singh rajpoot; 09.11.2020
comment
в вашем случае, если вам нужен cdf, вы должны сделать gamma.cdf(jan,a=fit_shape,loc = fit_loc, scale = fit_scale) . В приведенном выше примере я получил оценку и просто рисую график, чтобы показать соответствие - person StupidWolf; 09.11.2020
comment
Большое спасибо. Мне потребовалось некоторое время, чтобы получить его. Я сожалею об этом. Это было большой проблемой для меня. Спасибо еще раз. - person Vishal singh rajpoot; 10.11.2020
comment
пожалуйста :) да, масштаб, форма и положение гаммы иногда немного сбивают с толку - person StupidWolf; 10.11.2020