Не конечное разностное значение, многие данные становятся inf и NA после экспоненциального
Я собираюсь найти параметры для модели 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
1 ответ
BFGS требует, чтобы градиент функции был минимизирован. Если вы не пройдете один, он попытается использовать конечно-разностные оценки для его оценки. Глядя на вашу функцию правдоподобия, может случиться так, что тот факт, что вы "разбиваете" ее на элементы, равные 0 и не равные 0, создает разрыв, который препятствует правильному формированию числового градиента. Попробуйте использовать method = "Nelder-Mead"
и установив Hessian в FALSE и посмотрим, работает ли это. Если это так, вы можете использовать numDeriv
пакет для оценки градиента и гессиана в точке сходимости, если они вам нужны.