J'ai des modèles comme celui-ci:
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)
J'essaie maintenant d'évaluer si l'effet aléatoire doit être présent dans le modèle. Je compare donc les modèles en utilisant AIC ou anova, et j'obtiens l'erreur suivante:
> 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
Comme vous pouvez le voir, dans les deux cas, j'utilise le même ensemble de données. J'ai trouvé deux remèdes, mais je ne les considère pas satisfaisants:
- Ajout
method = "ML"
à l'appel lme () - je ne sais pas si c'est une bonne idée de changer la méthode. - Utiliser à la
lmer()
place. Étonnamment, cela fonctionne, malgré le fait que lmer () utilise la méthode REML. Cependant, je n'aime pas cette solution car lelmer()
ne montre pas les valeurs de p pour les coefficients - j'aime utiliser plus ancien à lalme()
place.
Avez-vous une idée s'il s'agit d'un bug ou non et comment pouvons-nous contourner cela?