【发布时间】:2019-06-23 22:23:09
【问题描述】:
我想最小化负对数似然,以便尽可能接近早期计算的分布。我的分布是 Beta-Binomial 分布,我需要选择 a (lpha) 和 b(eta) 参数。我的函数基于另一个topic 的答案之一来计算负对数似然。
def nll(a, b):
k = players['Goals'].sum() # equal to the number of successes
n = players['Shots'].sum() # equal to the number of trials
log = gammaln(n + 1) + gammaln(k + a) + gammaln(n - k + b) + gammaln(a + b) - (gammaln(k + 1) + gammaln(n - k + 1) + gammaln(a) + gammaln(b) + gammaln(n + a + b))
return -(np.exp(log))
接下来,我想最小化对数似然。在 R 中,这可以通过以下脚本完成:
# maximum likelihood estimation
m <- mle(ll, start = list(alpha = 1, beta = 10),
method = "L-BFGS-B", lower = c(0.0001, 0.1))
ab <- coef(m)
我正在尝试在 Python 中重现 R 脚本,如下所示:
init_params = [1, 10] # This is equal to the start-argument in R
res = minimize(nll, x0=init_params, method='L-BFGS-B', options={'disp' : True, 'maxiter': 250})
运行这个,会产生以下错误:
返回函数(*(wrapper_args + args)) 类型错误:nll() 缺少 1 个必需的位置参数:'b'
我到底做错了什么?我插入了 b=10 对吗?
【问题讨论】: