Ho modelli come questo:
require(nlme)
set.seed(123)
n <- 100
k <- 5
cat <- as.factor(rep(1:k, n))
cat_i <- 1:k # intercept per kategorie
x <- rep(1:n, each = k)
sigma <- 0.2
alpha <- 0.001
y <- cat_i[cat] + alpha * x + rnorm(n*k, 0, sigma)
plot(x, y)
m1 <- lm(y ~ x)
summary(m1)
m2 <- lm(y ~ cat + x)
summary(m2)
m3 <- lme(y ~ x, random = ~ 1|cat, na.action = na.omit)
summary(m3)
Ora sto cercando di valutare se l'effetto casuale dovrebbe essere presente nel modello. Quindi confronto i modelli usando AIC o anova e ottengo il seguente errore:
> AIC(m1, m2, m3)
df AIC
m1 3 1771.4696
m2 7 -209.1825
m3 4 -154.0245
Warning message:
In AIC.default(m1, m2, m3) :
models are not all fitted to the same number of observations
> anova(m2, m3)
Error in anova.lmlist(object, ...) :
models were not all fitted to the same size of dataset
Come puoi vedere, in entrambi i casi utilizzo lo stesso set di dati. Ho trovato due rimedi, ma non li considero soddisfacenti:
- Aggiunta
method = "ML"
alla chiamata lme () - non sono sicuro se è una buona idea cambiare il metodo. - Usando
lmer()
invece. Sorprendentemente, questo funziona, nonostante il fatto che lmer () usi il metodo REML. Tuttavia, questa soluzione non mi piace perchélmer()
non mostra i valori p per i coefficienti - mi piace usarelme()
invece più vecchi .
Hai idea se questo è un bug o no e come possiamo aggirarlo?