【问题标题】:non-finite finite-difference value, many data become inf and NA after exponential非有限差分值,许多数据在指数后变为inf和NA
【发布时间】:2015-01-28 13:46:28
【问题描述】:

我将找到秩-logit 模型的参数。但错误总是表明存在非有限的有限差分值。如果我改变 "b0

cjll <- function(b){

U <- X%*%b
lSU <- csm%*%exp(U)
   lSU <- (lSU!=0)*lSU+(lSU==0)
LL <- sum(Ccsm%*%U-log(lSU))

return(LL)
}

b0 <- rep(0,5)
res <- optim(b0,cjll,method="BFGS",hessian=TRUE,control=list(fnscale=-1))
#Error in optim(b0, cjll, method = "BFGS", hessian = TRUE, control = list(fnscale = -1)) :
#  non-finite finite-difference value [2]

b <- res$par
#Error: object 'res' not found

【问题讨论】:

  • 我试过了,值从2变成了1,但仍然没有解决'res

标签: r mathematical-optimization


【解决方案1】:

BFGS 需要最小化函数的梯度。如果你没有通过一个,它将尝试使用有限差分来估计它。查看您的似然函数,可能是您将其“拆分”为等于 0 且不等于 0 的元素会产生不连续性,从而阻止正确形成数值梯度。尝试使用 method = "Nelder-Mead" 并将 Hessian 设置为 FALSE,看看是否可行。如果是这样,您可以使用 numDeriv 包来估计收敛点处的梯度和 Hessian(如果需要)。

【讨论】:

  • 它有效!!!!太感谢了!我将看看 numDeriv 包!非常感谢
  • 现在我可以得到 b 的值,但是当我尝试打印 tval 时,会出现这样的错误> tval
  • @JiawenJiang,由于Hessian是假的,所以没有res$Hessian。您必须对其进行分析估计。 numDeriv 包中的hessian 函数可能可以帮助您。您的似然函数很可能是不连续的,以至于在收敛点没有有效的 Hessian。你必须尝试一下。
  • 如果使用fitdistrplus包可以通过fitdist(data, "gamma", optim.method="Nelder-Mead")更改优化方法。 fitdistr 方法的帮助有更多信息。
猜你喜欢
  • 2021-02-18
  • 2019-04-02
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 2015-09-08
  • 2020-10-23
  • 2022-10-05
  • 2022-11-30
相关资源
最近更新 更多