微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么mle函数不能带下限和上限运行?

如何解决为什么mle函数不能带下限和上限运行?

我尝试使用 mle 来估计负二项式分布的参数。这是我的代码

library(stats4)
library(bbmle)
library(MASS)

b=rnbinom(n=1000,size=3,prob=0.1)

LL2 <- function(size,prob) {
  R = dnbinom(b,size,prob,log = TRUE)
  -sum(R)
}

当我设置带有下限和上限的 mle 函数时,我得到了

stats4::mle(LL2,start = list(size = 3,prob = 0.1),lower = c(-Inf,-Inf),upper = c(Inf,Inf))
Error in optim(start,f,method = method,hessian = TRUE,lower = lower,: 
  L-BFGS-B needs finite values of 'fn'

当我移除边界时

stats4::mle(LL2,prob = 0.1))

Call:
stats4::mle(minuslogl = LL2,prob = 0.1))

Coefficients:
     size      prob 
3.0467857 0.1037522 

但是,如果我将边界更改为有限值,错误仍然存​​在。

我想知道为什么会这样?是不是因为 L-BFGS-B 方法不能处理边界设置?

任何评论将不胜感激。

解决方法

我使用 set.seed(101) 运行了您的设置代码。

创建评分函数的检测版本,以便我们可以看到优化器的去向:

LL2 <- function(size,prob) {
   R = dnbinom(b,size,prob,log = TRUE)
   res <- -sum(R)
   cat(size,res,"\n")
   res
}
stats4::mle(LL2,start = list(size = 3,prob = 0.1),lower = c(-Inf,-Inf),upper = c(Inf,Inf))
## 3 0.1 4085.146 
## 3.001 0.1 4085.166 
## 2.999 0.1 4085.127 
## 3 0.101 4084.767 
## 3 0.099 4085.858 
## 2.964666 1.099376 NaN 

优化错误(开始,f,方法 = 方法,黑森州 = TRUE,下 = 下,: L-BFGS-B 需要 'fn' 的有限值 另外: 警告信息: 在 dnbinom(b,log = TRUE) 中:产生 NaN

前 5 个步骤是评估初始值和导数的有限差分近似。紧接着的优化步骤将我们带到 prob = 1.099,这会给我们一个 NaN 结果(我们需要 0

您可以将 size 的下限设置为 0,将 prob 的下限设置为 (0,1) ...(我试过了,它似乎有效)。你必须对 L-BFGS-B 小心一点——它在计算有限差分近似时并不总是遵守界限,例如如果值 略高于 0(例如 0.002,因为默认的有限差分 epsilon 为 0.001)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。