对于数据框中每一列的 运行 lmer 模型循环给出 "variable lengths differ" 错误 (R)

For loop to run lmer model for each column in a dataframe gives "variable lengths differ" error (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,它仍然 returns 相同的错误。

如何在不为每个变量手动编写模型的情况下将其设置为 运行?

您的公式直接包含 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)
}