ランクロジットモデルのパラメーターを見つけます。しかし、エラーは常に非有限の有限差分値があることを示しています。 「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
BFGSでは、関数の勾配を最小化する必要があります。合格しなかった場合は、有限差分を使用して推定しようとします。尤度関数を見ると、0に等しく、0に等しくない要素によってそれを「分割」するという事実が、数値勾配が適切に形成されるのを妨げる不連続性を作成する可能性があります。 method = "Nelder-Mead"
を使用し、HessianをFALSEに設定して、それが機能するかどうかを確認してください。含まれている場合は、numDeriv
パッケージを使用して、必要に応じて収束点での勾配とヘッセ行列を推定できます。