2016-10-03 19 views
0

所以我想最大限度地爲伽瑪泊松似然函數和我編程式的R爲以下幾點:二元函數的最大化 - 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()也解決了這個問題。我試圖複製FindMaximum()在mathematica中的行爲。在一個完美的世界,我想工作代碼東西這樣的:

optimize(f=lik, a>0, b>0, x=x, t=t, maximum=TRUE, iteration=5000) 
$maximum 
    a 150 
    b 6 

感謝。

+0

是的,這可能是我想要的,我剛剛過了一個小時google搜索,並在此方案中R. –

+0

沒有一(1)看'?optim',要記住,*減少*默認情況下(在幫助文件中看到'fnscale'的描述); (2)'dnbinom'可能有幫助; (3)所以可能'MASS :: fitdistr' –

回答

1

optim' s第一個參數可以是參數的向量。所以,你可以嘗試這樣的事:

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)) 
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,實質上意味着我的伽馬參數是天道酬勤。因爲伽馬()比較快地命中無限。在mathematica中,解爲a = 169和b = 16505,而R在170處最大值遠不及170.在某些情況下,已知的解決方案超出了170個解決方案。