两个变量函数最大化 - R代码

时间:2016-10-03 16:33:38

标签: r function solver

因此,我试图最大化伽马泊松的似然函数,并将其编程为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

感谢。

2 个答案:

答案 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,这种异常的解决方案是什么?