我将找到一个rank logit模型的参数。但误差总是表明存在非有限差分值。如果我将"b0<-rep(0,5)“改为"b0<-rep(- 1 ,5)",非有限差值后的数字将从2变为1。如果您需要数据集,我会通过电子邮件发送给您。
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发布于 2015-01-28 13:46:28
BFGS需要最小化函数的梯度。如果你没有通过一个,它将尝试使用有限差分来估计它。看看您的似然函数,可能是您将其“拆分”为等于0和不等于0的元素的事实造成了不连续,从而阻止了数值梯度的正确形成。尝试使用method = "Nelder-Mead"并将Hessian设置为FALSE,看看是否有效。如果是这样的话,如果需要的话,你可以使用numDeriv包来估计收敛点处的梯度和海森曲线。
https://stackoverflow.com/questions/28185387
复制相似问题