Не конечное разностное значение, многие данные становятся 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 пакет для оценки градиента и гессиана в точке сходимости, если они вам нужны.

Другие вопросы по тегам