【问题标题】:Iteratively adding variables to an lm() function in R?迭代地将变量添加到 R 中的 lm() 函数?
【发布时间】:2021-10-13 12:32:16
【问题描述】:

简单的问题,但我发现自己很困惑。

我正在寻找一个循环,它将不断地将变量添加到 lm() 函数的 IV。我会测试 LM 的结果,直到满足条件。我只是很难找到一种方法来动态地将变量添加到回归的 IV 部分,一次一个。

第一次迭代看起来像:

lm(Y ~ X, data = data)

第二次迭代如:

lm(Y ~ X + X2, data = data)

第三次迭代如:

lm(Y ~ X + X2 + X3, data = data)

等等……

如果有人能指出我正确的方向,我将不胜感激。

谢谢!

【问题讨论】:

标签: r tidyverse


【解决方案1】:

另一种方法是使用Y ~ . 作为公式并根据需要提供数据子集。在这里,. 表示“公式中没有的所有列”(请参阅​​?formula)。以mtcars为例:

Y <- 'mpg'
Xs <- names(mtcars)[-1]

fits <- lapply(seq_along(Xs), function(x){
    lm(paste(Y, '~ .'), data = mtcars[, c(Y, Xs[1:x])])
})

【讨论】:

    【解决方案2】:

    将自变量作为list传递后,我们可以使用reformulate创建公式

    out <- lapply(list("X", c("X", "X2"), c("X", "X2", "X3")), 
          function(x) lm(reformulate(x, response = "Y"), data = data))
    

    或者让它自动化

    Xs <- setdiff(names(data), "Y")
    ind <- sequence(seq_along(Xs))
    lapply(split(Xs[ind], cumsum(ind == 1)), function(x) 
              lm(reformulate(x, response = "Y"), data = data))
    

    【讨论】:

      猜你喜欢
      • 2021-09-21
      • 1970-01-01
      • 2015-10-26
      • 2012-10-17
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      相关资源
      最近更新 更多