Dans le code suivant, j'effectue une régression logistique sur des données groupées en utilisant glm et "à la main" en utilisant mle2. Pourquoi la fonction logLik dans R me donne-t-elle une vraisemblance logLik (fit.glm) = - 2,336 différente de celle logLik (fit.ml) = - 5,514 que je reçois à la main?
library(bbmle)
#successes in first column, failures in second
Y <- matrix(c(1,2,4,3,2,0),3,2)
#predictor
X <- c(0,1,2)
#use glm
fit.glm <- glm(Y ~ X,family=binomial (link=logit))
summary(fit.glm)
#use mle2
invlogit <- function(x) { exp(x) / (1+exp(x))}
nloglike <- function(a,b) {
L <- 0
for (i in 1:n){
L <- L + sum(y[i,1]*log(invlogit(a+b*x[i])) +
y[i,2]*log(1-invlogit(a+b*x[i])))
}
return(-L)
}
fit.ml <- mle2(nloglike,
start=list(
a=-1.5,
b=2),
data=list(
x=X,
y=Y,
n=length(X)),
method="Nelder-Mead",
skip.hessian=FALSE)
summary(fit.ml)
#log likelihoods
logLik(fit.glm)
logLik(fit.ml)
y <- Y
x <- X
n <- length(x)
nloglike(coef(fit.glm)[1],coef(fit.glm)[2])
nloglike(coef(fit.ml)[1],coef(fit.ml)[2])
Réponses:
Il semble que la fonction logLik dans R calcule ce que l'on appelle dans SAS la "fonction de vraisemblance totale", qui dans ce cas inclut le coefficient binomial. Je n'ai pas inclus le coefficient binomial dans le calcul de mle2 car il n'a aucun impact sur les estimations des paramètres. Une fois cette constante ajoutée à la vraisemblance logarithmique dans le calcul de mle2, glm et mle2 sont d'accord.
la source