Tengo modelos como este:
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)
Ahora estoy tratando de evaluar si el efecto aleatorio debe estar presente en el modelo. Así que comparo los modelos usando AIC o anova, y obtengo el siguiente error:
> 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
Como puede ver, en ambos casos utilizo el mismo conjunto de datos. He encontrado dos remedios, pero no los considero satisfactorios:
- Agregando
method = "ML"
a la llamada lme () , no estoy seguro si es una buena idea cambiar el método. - Usando en su
lmer()
lugar. Sorprendentemente, esto funciona, a pesar del hecho de que lmer () usa el método REML. Sin embargo, no me gusta esta solución porquelmer()
no muestra los valores p para los coeficientes; en su lugar, me gusta usar los más antiguoslme()
.
¿Tienes alguna idea de si esto es un error o no y cómo podemos solucionarlo?