Метод максимального правдоподобия для гамма-распределения - PullRequest
2 голосов
/ 12 февраля 2020

Я использовал метод моментов, чтобы соответствовать отрицательным биномиальным, пуассоновым и геометрическим распределениям c.

Основа c Идея: сначала получить эмпирический, второй и т. Д. c. моменты, затем выведите параметры распределения из этих моментов.

Подробности этого вопроса вы можете увидеть: Подгонка распределений с методом максимального правдоподобия

И теперь я хочу реализовать это метод для гамма-распределения;

Для гамма-распределения я применил это;

import pandas as pd
from scipy.stats import gamma

x = pd.Series(x)
mean = x.mean()
var = x.var()
likelihoods = {}

alpha = (mean**2)/var
beta = alpha / mean
likelihoods['gamma'] = x.map(lambda val: gamma.pdf(val, alpha)).prod()

Однако значение вероятности бесконечно в результатах для гамма-распределения. Поэтому я не уверен, что смогу правильно применить этот метод для гаммы.

Есть ли кто-нибудь, кто может помочь в этом?

1 Ответ

1 голос
/ 12 февраля 2020

Вы используете определение гамма-распределения с \alpha и \beta, в то время как NumPy и SciPy используют параметры формы и масштаба, которые k и \theta.

По сути, вам нужно ответить взаимностью \ бета, чтобы вернуть масштаб.

import numpy as np
import pandas as pd
from scipy.stats import gamma

shape = 2.0
scale = 1.3

x = pd.Series(gamma.rvs(shape, loc = 0.0, scale=scale, size = 100000))
#x = pd.Series(np.random.gamma(shape, scale=scale, size=100000))

mean = x.mean()
var  = x.var()

alpha = (mean**2)/var
beta  = alpha / mean

print((alpha, 1.0/beta)) # NB! scale is 1/beta

likelihoods = {}
likelihoods['gamma'] = x.map(lambda val: gamma.pdf(val, alpha, loc = 0.0, scale = 1.0/beta)).prod()
print(likelihoods['gamma'])
...