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 lmtestpacchetto. 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, lmtestversione 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?