R中optim()中的Hessian矩阵

R中optim()中的Hessian矩阵,r,optimization,integral,nonlinear-optimization,gamma-distribution,R,Optimization,Integral,Nonlinear Optimization,Gamma Distribution,我在使用R中的optim()求解一个包含积分的可能性时遇到了一些问题,并获得了两个参数的hessian矩阵。算法收敛了,但在optim()中使用hessian=TRUE选项时出错。错误是: 积分错误(integrand1,下=s1[i]-1,上=s1[i]): 非有限函数值 还显示了NAs的警告消息 这是我的密码: s1=c(1384,1,1219,1597,2106,145,87,1535,290,1752,265,588,1188,160,745,237,479,39,99,56,1503,

我在使用R中的optim()求解一个包含积分的可能性时遇到了一些问题,并获得了两个参数的hessian矩阵。算法收敛了,但在optim()中使用hessian=TRUE选项时出错。错误是:

积分错误(integrand1,下=s1[i]-1,上=s1[i]): 非有限函数值

还显示了NAs的警告消息

这是我的密码:

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))
optim(par=c(0.1,0.1),LLL,method="L-BFGS-B", lower=c(0,0), hessian=TRUE)
s1=c(13841121915972106145,87153529017522655881188160745237479,39,99,5615031589166511064166635,19553,51,79155,851196142108325
,135,28,422,1032,1018,128,787,1704,307,854,6,896,902)
LLL=功能(par){

integrand1
optim
最小化函数。您可以在给定参数
rate
的情况下绘制似然函数。需要稍微修改一下才能绘制。 这样做:

z2 <- function(rate) {
    par <- numeric(2)
    par[1] <- .68
    par[2] <- rate
    y <- LLL(par)
    y
}

z1 <- Vectorize(z2,vectorize.args="rate")

curve(z1, from=.001,to=1)

z2我相信你在为
I==2
s1[2]-1
(0)到
s1[2]-1
(0)进行积分时,会评估
dgamma(0,形状=.1,比例=.1)
,这是
Inf
,如果你从
s1
中排除
1
,会发生什么情况?@Thales谢谢你。你昨天被告知要使用
lower=c(.001.001)
。你为什么不把它用作参数
lower
?将
lower
更改为
c(0.01,0.01)
,你会看到一个黑森语。@Bhas是的,我确实根据你的建议使用了lower=c(0.01,0.01)(在这篇文章中复制了错误的代码).你知道为什么gamma中的速率参数总是收敛到下限,以及估计值是否有效吗?谢谢。再次感谢你的帮助。