遍历列表并追加以在R中进行回归

时间:2019-04-16 10:54:24

标签: r regression lm

我知道在某个地方会存在这种问题,但是我找不到。我有变量a, b, c, d,我想编写一个循环,以便我回归并追加变量,并使用附加变量

再次回归

lm(Y ~ a, data = data),然后 lm(Y ~ a + b, data = data),然后

lm(Y ~ a + b + c, data = data)

您将如何做?

修改

以下是下一个相关问题:Link

3 个答案:

答案 0 :(得分:3)

使用粘贴 as.formula ,例如使用 mtcars 数据集的示例:

myFits <- lapply(2:ncol(mtcars), function(i){
  x <- as.formula(paste("mpg", 
                        paste(colnames(mtcars)[2:i], collapse = "+"), 
                        sep = "~"))
  lm(formula = x, data = mtcars)
})

注意:看起来像是重复的帖子,我已经看到了针对此类问题的更好的解决方案,目前无法找到。

答案 1 :(得分:3)

您可以使用lapply / reformulate方法进行操作。

formulae <- lapply(ivars, function(x) reformulate(x, response="Y"))
lapply(formulae, function(x) summary(do.call("lm", list(x, quote(dat)))))

数据

set.seed(42)
dat <- data.frame(matrix(rnorm(80), 20, 4, dimnames=list(NULL, c("Y", letters[1:3]))))
ivars <- sapply(1:3, function(x) letters[1:x])  # create an example vector ov indep. variables

答案 2 :(得分:2)

vars = c('a', 'b', 'c', 'd')
# might want to use a subset of names(data) instead of
# manually typing the names

reg_list = list()
for (i in seq_along(vars)) {
  my_formula = as.formula(sprintf('Y ~ %s', paste(vars[1:i], collapse = " + ")))
  reg_list[[i]] = lm(my_formula, data = data)
}

然后,您可以使用summary(reg_list[[2]])(对于第二个)检查单个结果。