Optimization 最大化可能性,朱莉娅

Optimization 最大化可能性,朱莉娅,optimization,julia,log-likelihood,Optimization,Julia,Log Likelihood,我有一个对数似然函数,我想最大化它关于θ(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 我使

我有一个对数似然函数,我想最大化它关于θ(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的
优化
函数作为:

   r=optimize(b->loglik(b,nn, 962), 978, BFGS() ); 
其中nn是一个数组。我得到了这个错误:

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

有人能帮忙吗?

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

optimize(b->loglik(first(b),nn,962), [978.,], BFGS())
(尽管您仍然需要为我们提供
nn
,以便此答案显示输出)


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

仍然不起作用,nn是一个91元素数组{Int64,1}
b->loglik(first(b),nn,962)
因为它需要标量。太好了,是的,我非常习惯于
x
是一个向量,以至于我没有注意到它在maxlik中是一个标量。当你有可行的解决方案时,别忘了接受答案。如果你能在你的问题中生成一个
nn
,那就太好了。