Распределение является бета-биномиальным, если p , вероятность успеха, в биномиальном распределении имеет бета-распределение с параметрами формы α> 0 и β> 0.Параметры формы определяют вероятность успеха.Я хочу найти значения для α и β , которые лучше всего описывают мои данные с точки зрения бета-биномиального распределения.Мой набор данных players
состоит из данных о количестве обращений ( H ), количестве бит-бит ( AB ) и конверсии ( H / AB * 1017).*) из многих бейсболистов.Я оцениваю PDF с помощью ответа JulienD в Бета биноминальная функция в Python
from scipy.special import beta
from scipy.misc import comb
pdf = comb(n, k) * beta(k + a, n - k + b) / beta(a, b)
Далее я пишу функцию логарифмического правдоподобия, которую мы будем минимизировать.
def loglike_betabinom(params, *args):
"""
Negative log likelihood function for betabinomial distribution
:param params: list for parameters to be fitted.
:param args: 2-element array containing the sample data.
:return: negative log-likelihood to be minimized.
"""
a, b = params[0], params[1]
k = args[0] # the conversion rate
n = args[1] # the number of at-bats (AE)
pdf = comb(n, k) * beta(k + a, n - k + b) / beta(a, b)
return -1 * np.log(pdf).sum()
Теперь я хочу написать функцию, которая минимизирует loglike_betabinom
from scipy.optimize import minimize
init_params = [1, 10]
res = minimize(loglike_betabinom, x0=init_params,
args=(players['H'] / players['AB'], players['AB']),
bounds=bounds,
method='L-BFGS-B',
options={'disp': True, 'maxiter': 250})
print(res.x)
Результат - [-6.04544138 2.03984464], что подразумевает, что α отрицателен, что невозможно.Я основал свой сценарий на следующем R-фрагменте.Они получают [101.359, 287.318] ..
ll <- function(alpha, beta) {
x <- career_filtered$H
total <- career_filtered$AB
-sum(VGAM::dbetabinom.ab(x, total, alpha, beta, log=True))
}
m <- mle(ll, start = list(alpha = 1, beta = 10),
method = "L-BFGS-B", lower = c(0.0001, 0.1))
ab <- coef(m)
Может кто-нибудь сказать мне, что я делаю неправильно?Помощь очень ценится!