2

我有一个对数似然函数,我想就 theta (N) 最大化它,它被定义为:

 function loglik(theta,n,r)
    N=theta;k=length(n);
    ar1=float(lgamma(N+1));ar2=sum(n)*log(sum(n)/(k*N));ar3=(k*N-sum(n))*log(1-(sum(n))/(k*N));
    par=float(lgamma((N-r)+1));
    return(-(ar1+ar2+ar3-par)) end

我使用 Optim.jl 的optimize函数为:

   r=optimize(b->loglik(b,nn, 962), 978, BFGS() ); 

其中 nn 是一个数组。我得到这个错误:

   ERROR:MethodError no method matching optimize (::#46#47,::Float64, ::Optim.BFGS)

任何人都可以帮忙吗?

4

1 回答 1

3

您快到了!您需要使用数组对其进行初始化。

optimize(b->loglik(first(b),nn,962), [978.,], BFGS())

(尽管您仍然需要向我们提供nn此答案以显示输出)

编辑:由于 b 是 loglik 中的标量,我将其更改b->loglik(first(b),nn, 962)为下面 Chris Rackauckas 所建议的。

于 2017-10-13T09:40:43.420 回答