回归r中数据框列的组合

回归r中数据框列的组合,r,R,我有一个数据框,其中colnames a,B,C,D带有数值。我正在尝试使用变量生成线性回归模型,并尝试所有可能的组合,如a、a+B、a+C、B、B+C…… 我无法生成与数据帧的组合 Data frame DependentVar A B C D 我正在尝试生成如下内容: 自变量的组合,如: var <- A,B,C,D,A+B,A+C,A+D,B+C,B+D,C+D,A+B+C,A+B+D and so on.. for (v in var){ models <- lm (De


我有一个数据框,其中colnames a,B,C,D带有数值。我正在尝试使用变量生成线性回归模型,并尝试所有可能的组合,如a、a+B、a+C、B、B+C……
我无法生成与数据帧的组合

Data frame
DependentVar A B C D 
我正在尝试生成如下内容:
自变量的组合,如:

var <- A,B,C,D,A+B,A+C,A+D,B+C,B+D,C+D,A+B+C,A+B+D and so on..
for (v in var){
models <- lm (DependentVar ~ eval(parse(text=v)), data=data)
r2 <- append(summary(models)$r.squared)
}
等等

任何帮助都将不胜感激

您的想法是正确的,但是您可以通过1)使用lappy()和2)使用as.formula()来改进结果

set.seed(123)

mydata感谢您的评论。我有一个疑问,如何自动生成公式列表,而不是手动写入。我的实际数据框架有20多列,几乎不可能全部写入。你能推荐一些代码来生成变量组合列表吗。感谢@ZheyuanLi。这篇文章我写了一半才被标记为dup。但原始答案有自动生成公式的方法。顺便问一下,你确定你所做的一切都是好事吗?我很少看到人们在工业规模上估计回归,而仅仅以统计上合理的方式看待R^2统计数据。我不知道。也许我在答案框被标记为重复之前就打开了它。
Variable combination  Model R2    
A                      0.8
B                      0.7
.
.
set.seed(1)
d<-data.frame(DV=rnorm(100,mean=100,sd=10),A=rnorm(100,mean=100,sd=10),B=rnorm(100,mean=100,sd=10))

formula_list<-list(as.formula('DV ~ A'),
                   as.formula('DV ~ B'),
                   as.formula('DV ~ A + B'))

lapply(formula_list, FUN = lm, data=d)
lm_wrapper<-function(formula, data){
  reg_res<-lm(formula, data=data)
  rsq<-summary(reg_res)$r.squared
  return(data.frame(formula=as.character(formula)[3], rsq=rsq))
}

all_res<-lapply(formula_list, FUN = lm_wrapper, data=d)

all_res_stack<-do.call('rbind',all_res)
> all_res_stack
  formula         rsq
1       A 0.004809535
2       B 0.026144428
3   A + B 0.026821577
set.seed(123)

mydata <- data.frame(A = rnorm(10, mean = 5),
                     B = rnorm(10, mean = 10),
                     C = rnorm(10, sd = 2),
                     D = rnorm(10, sd = 5))
mydata$DependentVar <- with(mydata, A + B + C + D + rnorm(10))

# expand.grid makes a data.frame, where each possible combination of values is
# given a row. Here, each row states which variables to use in a model. Remove
# the row where no variables are used.
independent_vars <- c('A', 'B', 'C', 'D')
include_choices <- lapply(independent_vars, function(x) c(TRUE, FALSE))
names(include_choices) <- independent_vars

combos <- do.call('expand.grid', args = include_choices)

combos <- combos[apply(combos, 1, any), ]

# Use combos to construct each model
predict_some_cols <- function(which_cols) {
  model_vars <- c('DependentVar', colnames(combos)[which_cols])
  lm(DependentVar ~ ., data = mydata[, model_vars])
}

model_list <- apply(combos, 1L, predict_some_cols)

# A really weird-looking way makes names, please somebody improve this
names(model_list) <- apply(combos, 1,
                           FUN = function(which_cols) {
                             paste0(colnames(combos)[which_cols],
                                    collapse = ' + ')
                           })

# Now go through the models and get the desired data.
rsquared <- vapply(model_list,
                   function(model) summary(model)$r.squared,
                   numeric(1))