如何使用lmer在df中运行多个变量(列)的模型

时间:2014-03-02 22:31:25

标签: r function lmer

我在df中有几个变量(列)我想运行lmer(来自lme4包) 假设我有一个名为df的数据框:

par1   par2 resp1 resp2
plant1 rep1 3     8
plant2 rep2 5     2
...

我正在尝试编写一个函数来执行此操作,但无法传递参数并在函数中使用它们。

model1 = function(df, varname){
  library(lme4)
  model1 = lmer(varname ~ + (1 | par1) + (1 | par2), data=df)
  return(model1)
}

resp1model = model1(df, "resp1")
resp2model = model1(df, "resp2")

有人可以建议最好的方法吗?也许一个功能不是答案?一个循环? 我应该说原因是,一旦我使函数工作,我希望函数从模型返回其他东西..例如AIC,BLUP等。

3 个答案:

答案 0 :(得分:4)

我这样做了,可能会更好

varlist=names(df)[i:j] #define what vars you want

blups.models <- lapply(varlist, function(x) {
  lmer(substitute(i ~ (1|par1)+(1|par2)+(1|par3), list(i = as.name(x))), data = df, na.action=na.exclude)
})

这里有你想要的所有变量的模型列表

答案 1 :(得分:1)

另一种方法是替换你的行:

model1 = lmer(varname ~ + (1 | par1) + (1 | par2), data=df)

model1 = lmer(paste0(varname," ~ + (1 | par1) + (1 | par2)"), data=df)

这会将公式作为字符串传递,lmer(...)将强制转换为公式。

答案 2 :(得分:0)

这是另一种方法..似乎有点复杂..但我想我会添加它的完整性: R: analyzing multiple responses (i.e. dependent variables) in a mixed effects model (lme4)