【问题标题】:Running several regressions with changing outcome variable in R在 R 中使用不断变化的结果变量运行多个回归
【发布时间】:2019-10-09 21:24:06
【问题描述】:

我有一个如下所示的数据框 (df):

condition  dv1  dv2  dv3
1          2    4    3
2          5    7    4
3          7    1    2

为了同时运行多个回归,我使用了这样的代码:

dfdv <- df[,2:4]  
output <- lm(as.matrix(dfdv) ~ condition, data = df)
summary(output)

这为我提供了 dv1、dv2 和 dv3 的所有 dv ~ 条件回归。这些是输出中给出的回归:

dv1 ~ condition
dv2 ~ condition
dv3 ~ condition

但是,我现在想控制回归中的不同条件。具体来说,我想找出一种有效运行以下回归的方法。

dv1 ~ condition + dv1
dv1 ~ condition + dv2
dv1 ~ condition + dv3

我使用与上述类似的原理尝试了以下操作,但没有成功。

dfdv <- df[,2:4]  
output2 <- lm(dv1 ~ condition + as.matrix(dfdv), data = df)
summary(output2)

它给了我一个单一的回归,它使用了一个回归中的所有 dv,而不是我想要的回归。这就是它给我的:

dv1 ~ condition + dv1 + dv2 + dv3

有谁知道我可以如何使用简单的代码执行这些回归分析?我的实际数据集中比我在这个例子中包含的更多。

【问题讨论】:

  • 我认为这个问题将受益于更现实的示例数据,这些数据可用于从回归中生成输出。

标签: r regression linear-regression tidyverse


【解决方案1】:

我们可以为此使用lapply。遍历列名“dv”,通过指定响应和因变量使用reformulate 创建公式,然后应用lm

v1 <- grep('^dv\\d+$", names(df), value = TRUE)
lapply(v1, function(dv) lm(reformulate(c(dv, "condition"),
           dv), data = df))

或者使用paste创建公式

lapply(v1, function(dv) lm(paste0(dv, " ~ ", "condition + ", dv), data = df))

【讨论】:

  • 您能解释一下 paste0 和重新格式化的作用吗?
  • @melbez 当然,给我一分钟
  • @melbez 正如我在示例中所展示的,您可以将“v1”更改为您想要的任何内容。即v1 &lt;- colnames(df)[3:4] 等。
  • @melbez 当您执行 function(x) x 时,它是匿名 lambda 函数,它返回 'v1' 的值,即。这里将是“dv1”、“dv2”、“dv3”。如有疑问,请打印lapply(v1, function(dv) dv)
  • @melbez 抱歉,我无法重现该问题。我举了一个明显可重复的例子。
猜你喜欢
  • 1970-01-01
  • 2020-08-19
  • 2019-10-04
  • 2021-08-21
  • 2022-12-14
  • 2022-01-09
  • 1970-01-01
  • 2022-07-15
  • 2016-07-01
相关资源
最近更新 更多