R 循环回归,将常数视为变量。错误:可变长度不同

R 循环回归,将常数视为变量。错误:可变长度不同,r,regression,lm,R,Regression,Lm,我想循环包含/排除某些变量,但我遇到了一个错误。下面是一些示例数据的问题 mtcars = data('mtcars') for(i in 0:1) { fitlm = lm(mpg ~ cyl + i * drat, data = mtcars) } Error in model.frame.default(formula = mpg ~ cyl + i * drat, data = mtcars, : variable lengths differ (found for 'i')

我想循环包含/排除某些变量,但我遇到了一个错误。下面是一些示例数据的问题

mtcars = data('mtcars')
for(i in 0:1) {
  fitlm = lm(mpg ~ cyl + i *  drat, data = mtcars)
}
Error in model.frame.default(formula = mpg ~ cyl + i * drat, data = mtcars,  : variable lengths differ (found for 'i')
但这样运行时不会出现问题:

fitlm = lm(mpg ~ cyl + 0 *  drat, data = mtcars)
fitlm = lm(mpg ~ cyl + 1 *  drat, data = mtcars)

如果变量有一个数字乘数,为什么回归会起作用,但如果是
i
,回归会失败?

尝试使用
as.formula
,如下所示:

# create an empty list to store the results 
fitlm <- list()

# loop, fit the model and assign the result to a new list in fitlm
for(i in 0:1) {
      fitlm[[i+1]] <- lm(as.formula(paste("mpg ~ cyl +", i, "*  drat")), data = mtcars) 
    }
fitlm <- purrr::map(c(0,1), ~lm(as.formula(paste("mpg ~ cyl +", .x, "*  drat")), data = mtcars))
结果将是:

> fitlm
[[1]]

Call:
lm(formula = as.formula(paste("mpg ~ cyl +", i, "*  drat")), 
    data = mtcars)

Coefficients:
 cyl  
2.79  


[[2]]

Call:
lm(formula = as.formula(paste("mpg ~ cyl +", i, "*  drat")), 
    data = mtcars)

Coefficients:
(Intercept)          cyl  
     37.885       -2.876  

这有点像黑客,但你可以试试这种形式

fitlm = list()
for(i in 0:1) {
  idrat = i*mtcars$drat
  fitlm[[i+1]] = lm(mpg ~ cyl + idrat, data = mtcars)
}
结果是什么

fitlm
## [[1]]
## 
## Call:
## lm(formula = mpg ~ cyl + idrat, data = mtcars)
## 
## Coefficients:
## (Intercept)          cyl        idrat  
##      37.885       -2.876           NA  
## 
## 
## [[2]]
## 
## Call:
## lm(formula = mpg ~ cyl + idrat, data = mtcars)
## 
## Coefficients:
## (Intercept)          cyl        idrat  
##      28.725       -2.484        1.872  

这绕过了
lm()
函数,当它看到
*
字符时,它会寻找交互,正如您在使用数字时发现的那样。

我正在测试不同的滞后(例如:
滞后(cyl,I)
,以及某些变量的存在/不存在。因此,在上面的示例中,当
i
0
时,将从回归中删除drat。如果我在回归中有多个
.x
,是否迭代所有可能的组合?或者我是否需要为我想要的每个不同的变量设置
map
这里的替代?.x对应于c(0,1)。大于.x是什么意思?要排除/包括的多个变量?