我对lme4有一些经验,但今天我第一次尝试了lmerTest,并且在使用rand()函数检查随机组件时感到惊讶。 (我知道这不是lme4的作者所建议的!)在故障排除中,我认为我发现了一些不受欢迎的行为:当rand()看到一个随机效应术语,其变量名称包含一个点时,它似乎将该术语解析为多个变量。当然,这些可能存在于数据集中,也可能不存在,但不幸的是它不会产生错误,只会产生奇怪的结果。
这是一个MWE:
library(dplyr)
nsub <- 500
nvis <- 6
data <- data.frame(subjid = factor(sort(rep(c(1:nsub),nvis))),
visit = rep(c(1:nvis),nsub))
base <- filter(data, visit==1) %>%
select(subjid) %>%
mutate(baseage=rnorm(nsub, 40, 10)) %>%
merge(data, by="subjid") %>%
mutate(interval = ifelse(visit==1, 0, 2*(visit-1) + runif(nsub*nvis, 0, 1)),
age = baseage + interval,
ageverylong = age,
age.very.long = age,
y = 100 - 0.1*age + rnorm(nsub*nvis))
mod1 <- lmer(y ~ (age | subjid), data=base)
mod2 <- lmer(y ~ (ageverylong | subjid), data=base)
mod3 <- lmer(y ~ (age.very.long | subjid), data=base)
summary(mod1) # These three give the same results (so it's not an lme4 problem)
summary(mod2)
summary(mod3)
rand(mod1) # The top two are the same
rand(mod2)
rand(mod3) # But this one is different