具有optim或numderiv包的Hessian矩阵?

时间:2018-03-13 17:29:24

标签: optimization poisson hessian-matrix log-likelihood

我对泊松分布的对数似然函数进行最大似然估计。在估计之后,我想计算系数的标准误差。为此,我需要粗麻布矩阵。现在我不知道应该使用哪个函数来从numderiv包中获取hessian矩阵,optim()或hessian()。

这两个功能都给了我不同的解决方案。如果我尝试从我从优化得到的粗麻布计算标准误差,我会在结果中得到一个NaN条目。 这两个函数之间的区别是什么,用于计算粗糙矩阵?

logLikePois <- function(parameter,y, z) {

  betaKoef <- parameter

  lambda <- exp(betaKoef %*% t(z))

  logLikeliHood <- -(sum(-lambda+y*log(lambda)-log(factorial(y))))
  return(logLikeliHood)

}
grad <- function (y,z,parameter){
    betaKoef <- parameter

    # Lamba der Poissonregression
    lambda <- exp(betaKoef%*%t(z))
   gradient <-  -((y-lambda)%*%(z))
   return(gradient)
  }

data(discoveries)
disc <- data.frame(count=as.numeric(discoveries),
                   year=seq(0,(length(discoveries)-1),1))

yearSqr <- disc$year^2

formula <- count ~ year + yearSqr

form <- formula(formula)

model <- model.frame(formula, data = disc)

z <- model.matrix(formula, data = disc)

y <- model.response(model)

parFullModell <- rep(0,ncol(z))

optimierung <- optim(par = parFullModell,gr=grad, fn = logLikePois,
                     z = z, y = y, method = "BFGS" ,hessian = TRUE)

optimHessian <- optimierung$hessian

 numderivHessian <- hessian(func = logLikePois, x = optimierung$par, y=y,z=z)

sqrt(diag(solve(optimHessian)))
sqrt(diag(solve(numderivHessian )))

0 个答案:

没有答案