2016-12-06 16 views
1

私はモデルを検索するためにregsubsetsを使用しました。パラメータのリストからすべてlmを自動的に作成することはできますか?leaps regsubsetsからすべてのモデルを入手

library(leaps) 
leaps<-regsubsets(y ~ x1 + x2 + x3, data, nbest=1, method="exhaustive") 
summary(leaps)$which 
    (Intercept)  x1  x2 x3                     
1  TRUE FALSE  FALSE TRUE                     
2  TRUE FALSE  TRUE TRUE                     
3  TRUE TRUE  TRUE TRUE                     

私は手動でmodel_1 <- lm(y ~ x3)などを実行します。これをリストに入れるにはどのように自動化できますか?

答えて

3

なぜすべてのモデルのリストが必要なのかわかりません。 summarycoefの方法が役立ちます。しかし、私は最初に純粋なプログラミングの面からあなたの質問に答えて、この時点に戻ってきます。これを行うには


簡単な方法はreformulate経由です:*applyソリューションの必要はありません

## you are masking `leaps` and `data` function!! 
leaps <- regsubsets(y ~ x1 + x2 + x3, data, nbest = 1, method = "exhaustive") 
X <- summary(leaps)$which 

xvars <- dimnames(X)[[2]][-1] ## column names (all covariates except intercept) 
responsevar <- "y" ## name of response 

lst <- vector("list", dim(X)[1]) ## set up an empty model list 

## loop through all rows/model specifications 
for (i in 1:dim(X)[1]) { 
    id <- X[i, ] 
    form <- reformulate(xvars[which(id[-1])], responsevar, id[1]) 
    lst[[i]] <- lm(form, data) 
    } 

:ここ

reformulate(termlabels, response = NULL, intercept = TRUE) 

方法です。 lmはコストがかかるので、forループにオーバーヘッドが全くありません。 (;特に当てはまりますが、因子変数を持っているときに、モデル行列のassign属性を使用します)


より高速な方法は、すべての共変量を含むモデル行列を設定し、動的に列を選択することです。モデルフィッティングは.lm.fitを介して行われます。しかし、線形モデルの専門家でない限り、生の出力が.lm.fitのモデル要約/予測を作成するのは難しいでしょうが、私はsummary(leaps)が様々な有用な統計を返すべきだと思います。

leaps:::coef.regsubsets機能はこれと同等です.lm.fitルート。単純に:

あなたはすべてのモデルの係数と分散共分散行列を取得します。

関連する問題