У меня есть такие модели:
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)
Сейчас я пытаюсь оценить, должен ли случайный эффект присутствовать в модели. Поэтому я сравниваю модели с использованием AIC или anova и получаю следующую ошибку:
> 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
Как видите, в обоих случаях я использую один и тот же набор данных. Я нашел два лекарства, но я не считаю их удовлетворительными:
- Добавление
method = "ML"
в вызов lme () - не уверен, стоит ли менять метод. - Использование
lmer()
вместо. Удивительно, но это работает, несмотря на то, что lmer () использует метод REML. Однако мне не нравится это решение, потому чтоlmer()
оно не показывает p-значения для коэффициентов -lme()
вместо этого я предпочитаю использовать более старые .
У вас есть идея, если это ошибка или нет, и как мы можем обойти это?