En el siguiente código realizo una regresión logística en datos agrupados usando glm y "a mano" usando mle2. ¿Por qué la función logLik en R me da una probabilidad de registro logLik (fit.glm) = - 2.336 que es diferente del logLik (fit.ml) = - 5.514 que obtengo a mano?
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])
Respuestas:
Parece que la función logLik en R calcula lo que se conoce en SAS como la "función de probabilidad completa", que en este caso incluye el coeficiente binomial. No incluí el coeficiente binomial en el cálculo de mle2 porque no tiene impacto en las estimaciones de los parámetros. Una vez que esta constante se agrega a la probabilidad logarítmica en el cálculo de mle2, glm y mle2 están de acuerdo.
fuente