对于循环,为数据帧中的每个列运行 lmer 模型会给出"variable lengths differ"错误 (R)



我正在尝试运行一个for循环,该循环将数据帧中的每一列插入lme4::lmer((模型语法,并将结果附加到列表中,例如

list_results_univariate <- list()
for (i in names(my_dataset))

{

resultmodel <- lmer(y_variable ~ 
i + i*timevar1 + i*timevar2 + 
(1|Date) + (1|Location), 
data= my_dataset)

tidy_resultmodel <- tidy_lmer(resultmodel)  

list_results_univariate[[i]] <- tidy_resultmodel

}    

但结果是:

Error in model.frame.default(data = my_dataset, drop.unused.levels = TRUE,  : 
variable lengths differ (found for 'i')

数据集不包含NA,也不包含单一级别的因素,因为我已经删除了这些因素。如果我从我迭代的名称列表中删除timevar1、timevar2、Date和Location,它仍然会返回相同的错误。

在不为每个变量手动编写模型的情况下,如何运行此程序?

您的公式直接包含i,这意味着lmer希望在数据集中找到一个名为i的列。i变量的长度为1(字符串列名(,但lmer需要一个长度等于y_variable长度的变量,因此出现错误消息。

在循环中,您应该创建一个公式,i计算为其基础值,然后在lmer中使用该公式。例如:

library(lme4)
dat <- data.frame(id = sample(c("a", "b", "c"), 100, replace=TRUE),
y = rnorm(100),
x = rnorm(100),
w = rnorm(100),
z = rnorm(100))
# this errors
for (i in c("x", "w", "z")) {
lmer(y ~ i + (1 | id), data=dat)
}
# this works
models <- list()
for (i in c("x", "w", "z")) {
f <- formula(paste("y~(1|id)+", i))
models[[i]] <- lmer(f, data=dat)
}

最新更新