Проблема в том, что lmerTest::step.lmerModLmerTest
прерывается, когда все случайные эффекты исключаются из модели на этапе выбора случайных эффектов. Это, вероятно, не должно (я думаю, что более ранние версии пакета не могут), но это не слишком сложно обойти. Вы можете указать, что модель случайных эффектов не должна быть упрощена (step(full.model, reduce.random=FALSE)
), или , когда вы столкнетесь с этой ошибкой, отбросьте компоненты случайных эффектов модели и затем используйте step()
на Полученная линейная модель:
fixmodel <- lm(formula(full.model,fixed.only=TRUE),
data=eval(getCall(full.model)$data))
step(fixmodel)
(поскольку он включает eval()
, это будет работать только в среде, где R может найти фрейм данных, на который ссылается аргумент data=
).
Я отправил вопрос об этой проблеме.
Кроме того (смущает), stats::step
имеет другие аргументы / делает другие предположения, чем step.lmerModLmerTest
в пакете lmerTest
. stats::step
определяется как
step(object, scope, scale = 0,
direction = c("both", "backward", "forward"),
trace = 1, keep = NULL, steps = 1000, k = 2, ...)
, в то время как step.lmerModLmerTest
использует
step(object, ddf = c("Satterthwaite",
"Kenward-Roger"), alpha.random = 0.1, alpha.fixed = 0.05,
reduce.fixed = TRUE, reduce.random = TRUE, keep, ...)
В частности, аргумент direction
не применяется (step.lmerModLmerTest
делает только обратное исключение); не делает k
(я думаю, step.lmerModLmerTest
использует AIC, но мне придется перепроверить).
set.seed(1001)
dd <- data.frame(x1=rnorm(500),x2=rnorm(500),
x3=rnorm(500),f=factor(rep(1:50,each=10)))
library(lme4)
dd$y <- simulate(~x1+x2+x3+(1|f),
newdata=dd,
newparams=list(theta=1,beta=c(1,2,0,0),
sigma=1),
family=gaussian)[[1]]
library(lmerTest)
full.model <- lmer(y~x1+x2+x3+(1|f), data=dd)
step.model<- step(full.model)
step.model
имеет класс step_list
; есть метод печати, но нет итогового метода.