使循环为数据帧中的每一列运行lmer模型会产生“可变长度不同”错误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,它仍然会返回相同的错误

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

解决方法

您的公式直接包含[[Fit Statistics]] # fitting method = leastsq # function evals = 23 # data points = 129 # variables = 2 chi-square = 8.89790022 reduced chi-square = 0.07006221 Akaike info crit = -340.945624 Bayesian info crit = -335.225999 [[Variables]] fc: 1149.59953 +/- 572.031178 (49.76%) (init = 500) alpha: 0.64118507 +/- 0.04236375 (6.61%) (init = 0.5) [[Correlations]] (unreported correlations are < 0.100) C(fc,alpha) = 0.874 ,这意味着lmfit希望在数据集中找到名为i的列。您的lmer变量的长度为1(字符串列名称),但是i期望变量的长度等于您的i的长度,因此会出现错误消息。

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

i