Estaba buscando la manera de hacer una prueba de razón de verosimilitud en R para comparar los ajustes del modelo. Primero lo codifiqué yo mismo, luego encontré que tanto el método por defecto anova()
y también lrtest()
en el lmtest
paquete. Sin embargo, cuando lo comprobé, anova()
siempre produce un valor p ligeramente diferente de los otros dos, aunque el parámetro 'test' esté ajustado a "LRT". Es anova()
¿Realizando alguna prueba sutilmente diferente, o no estoy entendiendo algo?
Plataforma: R 3.2.0 corriendo en Linux Mint 17, lmtest
versión 0.9-33
Código de ejemplo:
set.seed(1) # Reproducibility
n=1000
y = runif(n, min=-1, max=1)
a = factor(sample(1:5, size=n, replace=T))
b = runif(n)
# Make y dependent on the other two variables
y = y + b * 0.1 + ifelse(a==1, 0.25, 0)
mydata = data.frame(y,a,b)
# Models
base = lm(y ~ a, data=mydata)
full = lm(y ~ a + b, data=mydata)
# Anova
anova(base, full, test="LRT")
# lrtest
library(lmtest)
lrtest(base, full)
# Homebrew log-likelihood test
like.diff = logLik(full) - logLik(base)
df.diff = base$df.residual - full$df.residual
pchisq(as.numeric(like.diff) * 2, df=df.diff, lower.tail=F)
Cuando lo ejecute, anova()
da un valor p de 0,6071, mientras que los otros dos dan 0,60599. Una diferencia pequeña, pero consistente, y demasiado grande para ser imprecisión en cómo se almacenan los números en coma flotante. ¿Puede alguien explicar por qué anova()
da una respuesta diferente?