Je cherchais des moyens de faire un test de rapport de vraisemblance en R pour comparer les ajustements du modèle. Je l'ai d'abord codé moi-même, puis j'ai trouvé la anova()
fonction par défaut et également lrtest()
dans le lmtest
package. Cependant, lorsque j'ai vérifié, anova()
produit toujours une valeur de p légèrement différente des deux autres, même si le paramètre «test» est réglé sur «LRT». Effectue-t-il anova()
réellement un test subtilement différent, ou est-ce que je ne comprends pas quelque chose?
Plate-forme: R 3.2.0 fonctionnant sous Linux Mint 17, lmtest
version 0.9-33
Exemple de code:
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)
Lorsque je l'exécute, anova()
donne une valeur de p de 0,6071, tandis que les deux autres donnent 0,60599. Une petite différence, mais cohérente et trop grande pour être imprécise dans la façon dont les nombres à virgule flottante sont stockés. Quelqu'un peut-il expliquer pourquoi anova()
donne une réponse différente?