summary.lm() 関数をハックして、必要なビットだけを取得し、残りを残すことができます。
あなたが持っている場合
nVariables <- 5
nObs <- 15
y <- rnorm(nObs)
x <- matrix(rnorm(nVariables*nObs),nrow=nObs)
allModels <-lm(y~x)
次に、これは lm.summary() 関数からのコードですが、余分な荷物はすべて削除されています (エラー処理もすべて削除されていることに注意してください)。
p <- allModels$rank
rdf <- allModels$df.residual
Qr <- allModels$qr
n <- NROW(Qr$qr)
p1 <- 1L:p
r <- allModels$residuals
f <- allModels$fitted.values
w <- allModels$weights
mss <- if (attr(allModels$terms, "intercept"))
sum((f - mean(f))^2) else sum(f^2)
rss <- sum(r^2)
resvar <- rss/rdf
R <- chol2inv(Qr$qr[p1, p1, drop = FALSE])
se <- sqrt(diag(R) * resvar)
est <- allModels$coefficients[Qr$pivot[p1]]
tval <- est/se
tval
によっても与えられるように、t 統計のベクトルになりました。
summary(allModels)$coefficients[,3]
大きなモデルに問題がある場合は、コードを書き直して、複数の行/割り当てをより少ない行にまとめることで、より少ないオブジェクトを保持するようにすることができます。
私が知っているハッキーな解決策。しかし、それは可能な限り高速になります。コードのすべての行も関数に入れる方がきれいだと思います。