回归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))