您可以破解 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]
如果您在大型模型上遇到问题,您可能需要重写代码,以便通过将多行/分配复合成更少的行来保留更少的对象。
我知道的哈克解决方案。但它会尽可能快。我想将所有代码行也放入一个函数中会更整洁。