因此,我试图最大化伽马泊松的似然函数,并将其编程为R,如下所示:
lik<- function(x,t,a,b){
for(i in 1:n){
like[i] =
log(gamma(a + x[i]))-log(gamma(a))
-log(gamma(1+x[i] + x[i]*log(t[i]/b)-(a+x[i])*log(1+t[i]/b)
}
return(sum(like))
}
其中x和t是数据,我有n个数据行。
我需要a和b同时解决。 R中是否存在内置函数?或者我是否需要硬编码算法来解决方程组? [我不想]我知道optimize()解决了1个变量,fminbnd()也是如此。我试图在mathematica中复制FindMaximum()的行为。在一个完美的世界里,我希望代码可以像这样工作 :
optimize(f=lik, a>0, b>0, x=x, t=t, maximum=TRUE, iteration=5000)
$maximum
a 150
b 6
感谢。
答案 0 :(得分:1)
optim'
的第一个参数可以是参数向量。所以你可以尝试这样的事情:
lik <- function(p=c(1,1), x, t){
# In the body of the function replace a by p[1] and b by p[2]
}
optim(c(1,1), lik, method = c("L-BFGS-B"), x=x, t=t, control=list(fnscale=-1))
答案 1 :(得分:0)
所以最终解决的问题是:
attempt2d <- optim(
par = c(sumx/sumt, 1), fn = lik, data = data11,
method = "L-BFGS-B", control = list(fnscale = -1, trace=TRUE),
lower=0.1, upper = 170
)
然而,我的参数耗尽到170,这实际上意味着我的伽马参数是Inf。因为gamma()相对较快地达到无穷大。在mathematica中,解决方案是a = 169和b = 16505,并且R在170处达不到最大值。已知的解决方案在某些情况下超过170,这种异常的解决方案是什么?