【问题标题】:Optim: non-finite finite-difference value in L-BFGS-BOptim:L-BFGS-B 中的非有限差分值
【发布时间】:2018-01-02 10:36:06
【问题描述】:

我正在尝试使用 R 的“优化”最大化可能性。我收到错误“非有限差分值”。

我使用 L-BFGS-B 是因为我必须将第 11 个参数(伯努利“p”)限制为 0

请注意,我在这里使用了一个楼层函数,因为“试验”参数(参数 1 到 10)需要离散值。

library(rmutil)
Nhat<-c(14335,15891,2700,1218,2213,10985,4985,8738,13878)
sdNhat<-
sqrt(c(26915344,6574096,175561,51529,71824,12166144,145924,2808976,3319684))
C<-c(313,410,38,30,69,175,132,193,240)
LL1<-vector()
LL2<-vector()
NLL<-function(data,par){
for (i in 1:length(Nhat)){
LL1[i]<-dnorm(Nhat[i],par[i],sdNhat[i],log=TRUE)
LL2[i]<-dbetabinom(C[i],floor(par[i]),par[length(Nhat)+1],par[length(Nhat)+2],log=TRUE)
}
-1*(sum(LL1)+sum(LL2))
}
out<-optim(par=c(floor(Nhat*runif(length(Nhat),0.9,1.1)),0.02,3),
       fn=NLL,data=list(Nhat=Nhat,sdNhat=sdNhat,C=C),
       method='L-BFGS-B',
       lower=c(rep(min(Nhat),length(Nhat)),0.0001,1),
       upper=c(rep(min(Nhat),length(Nhat)),0.9999,2))

【问题讨论】:

    标签: r nonlinear-optimization


    【解决方案1】:

    您遇到错误,因为您为参数 1 到 9 设置的边界是相同的。因此,您必须将upper=c(rep(min(Nhat),length(Nhat)),0.9999,2))(或lower)调整为一个区间。

    你说只有 10th(你实际上写了 11th,但我猜这是一个错字)必须在 0 和 1 之间,所以这可以工作:

    set.seed(1)
    out<-optim(par=c(floor(Nhat*runif(length(Nhat),0.9,1.1)),0.02,3),
               fn=NLL,data=list(Nhat=Nhat,sdNhat=sdNhat,C=C),
               method='L-BFGS-B',
               lower=c(rep(-Inf,length(Nhat)),0,-Inf),
               upper=c(rep(Inf,length(Nhat)),1,Inf))
    out
    # $par
    # [1] 13660.61522882 15482.96819195  2730.66273051  1310.04511624  2077.45269032 11857.94955470
    # [7]  5417.09464008  9016.57472573 14234.22972586     0.02165253   826.21691430
    # 
    # $value
    # [1] 116.2657
    

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 1970-01-01
      • 2017-02-06
      • 2023-04-05
      • 2017-05-23
      • 2015-07-20
      • 1970-01-01
      • 2021-09-29
      • 2016-03-25
      相关资源
      最近更新 更多