问题描述
我在 R 中使用 optim() 来求解涉及积分的似然性时遇到了一些问题.我收到一条错误消息,指出优化错误(par = c(0.1,0.1),LLL,方法=L-BFGS-B",lower = c(0,:L-BFGS-B需要'fn的有限值'".下面是我的代码:
I'm having some trouble using optim() in R to solve for a likelihood involving an integral. I get an error that says "Error in optim(par = c(0.1, 0.1), LLL, method = "L-BFGS-B", lower = c(0, : L-BFGS-B needs finite values of 'fn'". Below is my code:
s1=c(1384,1,1219,1597,2106,145,87,1535,290,1752,265,588,1188,160,745,237,479,39,99,56,1503,158,916,651,1064,166,635,19,553,51,79,155,85,1196,142,108,325
,135,28,422,1032,1018,128,787,1704,307,854,6,896,902)
LLL=function (par) {
integrand1 <- function(x){ (x-s1[i]+1)*dgamma(x, shape=par[1], rate=par[2]) }
integrand2 <- function(x){ (-x+s1[i]+1)*dgamma(x, shape=par[1],rate=par[2]) }
likelihood = vector()
for(i in 1:length(s1)) {likelihood[i] =
log( integrate(integrand1,lower=s1[i]-1,upper=s1[i])$value+ integrate(integrand2,lower=s1[i],upper=s1[i]+1)$value )
}
like= -sum(likelihood)
return(like)
}
optim(par=c(0.1,0.1),LLL,method="L-BFGS-B", lower=c(0,0))
感谢您的帮助.
最好,
YM
推荐答案
在您提供的参数的下限处评估的目标函数是无穷大.
The objective function evaluated at the lower bounds of the parameters you provided is infinity.
LLL(c(0,0))
# [1] Inf
这就是 L-BFGS-B
失败的原因.尝试不同的下限,例如 c(0.001,0.001)
,您将得到一个解决方案.
That's why L-BFGS-B
fails. Try a different lower bound, e.g., c(0.001,0.001)
and you will get a solution.
optim(par=c(0.1,0.1),LLL,method="L-BFGS-B", lower=c(0.001,0.001))
$par
[1] 0.6865841 0.0010000
$value
[1] 369.5532
$counts
function gradient
14 14
$convergence
[1] 0
$message
[1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
要获得参数的 95% 置信区间,请尝试以下操作:
To get the 95% confidence intervals for the parameters try this:
res <- optim(par=c(0.1,0.1),LLL,method="L-BFGS-B", lower=c(0.005,0.005), hessian=TRUE)
n <- length(s1)
res$par # solution
# [1] 1.900928 0.005000
res$par - 1.96*sqrt(diag(solve(res$hessian)))/n # lower limit for 95% confint
# [1] 1.888152372 0.004963286
res$par + 1.96*sqrt(diag(solve(res$hessian)))/n # upper limit for 95% confint
# [1] 1.913703040 0.005036714
参考这篇文章:http://www.ms.uky.edu/~mai/sta321/MLEexample.pdf
这篇关于R 中 optim() 的优化(L-BFGS-B 需要 'fn' 的有限值)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!