首页 > 解决方案 > 在 R 中建立混合效应模型时,模型如何应用于循环指定的所有变量?

问题描述

我在 R 中安装了一个混合效应模型。但我想用一个代码将此模型应用于我的数据集中的所有数值变量。我写了一个类似下面的代码,但出错了。我能做些什么?

我的数据=df

# 200 x 20
   week      weight     height  .......
  <fct>      <dbl>      <dbl>     
1 week1       50.0       160        
2 week1       62.5       172     
3 week2       49.6       155     
4 week3       80.0       165     
5 week2       56.8       163     
6 week3       72.3       180    
.
.
.
.
 

为单个变量建立混合效应模型如下

mixed.model <- lmer( weight ~ 1 + (1|week), data = df)
a=ranova(mixed)
a$`Pr(>Chisq)`

我编写的适用于多个变量的代码

for (i in 2:(dim(df)[2])){
  mixed.model <- lmer( i ~ 1 + (1|week), data = df)
}

我得到的错误

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

标签: r

解决方案


我可能会先制定一个公式,然后将公式传递给模型函数(感谢 Ben Bolker 提供有关重新制定的提示):

for (i in names(df)[-1]){
  form <- reformulate("1 + (1|week)", response=i)
  mixed.model <- lmer(form, data = df)
}

编辑

为了回应关于始终获取第一个变量的评论,这是我在运行循环时得到的,每次打印公式时:

df <- data.frame(
  week = sample(1:3, 1000, replace=TRUE), 
  X1 = rnorm(1000), 
  X2 = rnorm(1000),
  X3 = rnorm(1000)
)

library(lme4)
for (i in names(df)[-1]){
  form <- reformulate("1 + (1|week)", response=i)
  print(form)
  # mixed.model <- lmer(form, data = df)
}

# X1 ~ 1 + (1 | week)
# X2 ~ 1 + (1 | week)
# X3 ~ 1 + (1 | week)

如您所见,每次迭代都有不同的公式。


推荐阅读