如何解决为什么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 举报,一经查实,本站将立刻删除。