なぜすべてのモデルのリストが必要なのかわかりません。 summary
とcoef
の方法が役立ちます。しかし、私は最初に純粋なプログラミングの面からあなたの質問に答えて、この時点に戻ってきます。これを行うには
簡単な方法は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
ルート。単純に:
あなたはすべてのモデルの係数と分散共分散行列を取得します。