Stavo cercando modi per fare un test del rapporto di verosimiglianza in R per confrontare gli adattamenti del modello. L'ho prima codificato da solo, quindi ho trovato sia la anova()
funzione predefinita che anche lrtest()
nel lmtest
pacchetto. Quando ho controllato, però, anova()
produce sempre un valore p leggermente diverso dagli altri due anche se il parametro 'test' è impostato su "LRT". Sta anova()
effettivamente eseguendo un test leggermente diverso o non capisco qualcosa?
Piattaforma: R 3.2.0 in esecuzione su Linux Mint 17, lmtest
versione 0.9-33
Codice d'esempio:
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)
Quando lo anova()
eseguo , dà un valore p di 0.6071, mentre gli altri due danno 0.60599. Una piccola differenza, ma coerente, e troppo grande per essere imprecisa nel modo in cui sono memorizzati i numeri in virgola mobile. Qualcuno può spiegare perché anova()
dà una risposta diversa?