【问题标题】:Call variables for regression in lmer function调用 lmer 函数中的回归变量
【发布时间】:2018-11-01 13:19:00
【问题描述】:

我正在调用 lme4 包中的 lmer 函数。如果我对列名进行硬编码,该函数将起作用。但是,如果我将其称为变量,则会引发错误。我的最终目标是在每个列名之间调用一个包含“+”的字符串。

这是一个lmer 调用示例:

colnames(df)
COL_A, COL_B, COL_D

这行得通:

output <- lmer(COL_A ~ 1 + COL_B + 1|COL_D, df, REML = FALSE, verbose = TRUE)

这不是:

var_a <- COL_A
var_b <- COL_B
var_c <- COL_D

output <- lmer(var_a ~ 1 + var_b + 1|var_c, df, REML = FALSE, verbose = TRUE)

出现的错误:

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

如果能解决这个问题,那就太棒了。

虽然我的最终目标是将函数作为字符串调用,所以如下所示:

form_lmer<-"COL_A ~ 1 + COL_B + 1|COL_D"

output <- lmer(form_lmer, df, REML = FALSE, verbose = TRUE)

有没有人遇到过这种事情?

【问题讨论】:

  • this 有帮助吗?
  • output &lt;- lmer(as.formula(form_lmer), df, REML = FALSE, verbose = TRUE)?
  • 您的意思是var_a &lt;- "COL_B"var_a &lt;- df$COL_B 还是别的什么? var_a &lt;- COL_B 仅在您的全局环境中已经存在 COL_B 变量时才有效...
  • 顺便说一句,您的最终规范(以form_lmer 表示)确实有效,尽管我不推荐它...
  • @BenBolker 为什么?

标签: r string lme4


【解决方案1】:

你可以的

output<-lmer(paste0(var_a, "~ 1 + ",var_b," + 1|",var_c), df, REML = FALSE, verbose = TRUE)

【讨论】:

  • 我会推荐form &lt;- reformulate(c(var_b,sprintf("(1|%s)",var_c)),response=var_a);没有特别不同,但可能更优雅一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 2022-01-13
  • 1970-01-01
相关资源
最近更新 更多