2016-06-23 9 views
-2


データフレームには、数値の列名A、B、C、Dのデータフレームがあります。私は変数を使って線形回帰モデルを生成しようとしており、A、A + B、A + C、B、B + Cのような考えられるすべての組み合わせを試しています。
データフレームとの組み合わせの生成に問題があります。回帰rのデータフレーム列の組み合わせ

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) 
} 

データフレームのような出力:

Variable combination Model R2  
A      0.8 
B      0.7 
. 
. 

ので、任意の助けのような独立変数の
組み合わせ:私はこのような何かを生成しようとしています

Data frame 
DependentVar A B C D 

大いに感謝されます!

答えて

1

あなたは正しい考えを持っていますが、あなたは1で結果を改善することができます)(lapply使用)と2)の出力データフレームを取得するにはas.formula()

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) 

を使用して、あなたはこの同じを使用することができますFUN = lmではなく、FUN =を後処理を行うlmのラッパーに設定します。ここで

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次のようになります。

> all_res_stack 
    formula   rsq 
1  A 0.004809535 
2  B 0.026144428 
3 A + B 0.026821577 
+0

コメントありがとうございました。私はformula_listを自動的に生成し、それを手作業で書くのではなく、疑問を持っています。私の実際のデータフレームは20列以上あり、それらのすべてを書くことはほとんど不可能です。変数の組み合わせリストを生成するコードをいくつか提案してください。ありがとうございます – rkg

+0

@ ZheyuanLiとAggree。私はdupとしてマークされる前に、この投稿の途中にある。しかし、元の答えは自動的に数式を生成する方法を持っています。 さて、あなたがしていることは何でも良いことだと確信していますか?非常にまれに私は人々が工業的規模で回帰を見積もっているのを見たことがあり、統計的に健全な方法でR^2統計を見るだけです。 – AOGSTA

0
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)) 
+0

私は分かりません。たぶん私はそれが重複とマークされる前に、回答箱を開いていた。 –

関連する問題