R/summary_lm.R

Defines functions summary_lm

Documented in summary_lm

#' summary_lm
#'
#' summary method for class ".lm.fit".. It's 200 times faster than traditional \code{lm}.
#'
#' @param obj Object returned by \code{\link{.lm.fit}}.
#' @param ... ignored
#'
#' @return a p x 4 matrix with columns for the estimated coefficient, its standard error,
#' t-statistic and corresponding (two-sided) p-value. Aliased coefficients are omitted.
#'
#' @example R/examples/ex-summary_lm.R
#' @export
summary_lm <- function(obj, ...) {
  z <- obj
  p <- z$rank

  Qr <- z$qr
  n <- nrow(Qr)
  rdf <- n - p # df.residual

  r <- z$residuals
  # f <- z$fitted.values
  # mss <- sum((f - mean(f))^2)
  rss <- sum(r^2)
  resvar <- rss / rdf

  p1 <- 1L:p
  R <- chol2inv(Qr[p1, p1, drop = FALSE])
  se <- sqrt(diag(R) * resvar)
  est <- z$coefficients[z$pivot[p1]]
  tval <- est / se
  # ans <- z[c("call", "terms", if (!is.null(z$weights)) "weights")]
  # ans$residuals <- r
  coefficients <- cbind(est, se, tval, 2 * pt(abs(tval),
    rdf,
    lower.tail = FALSE
  ))
  dimnames(coefficients) <- list(
    names(z$coefficients)[z$pivot[p1]],
    c("Estimate", "Std. Error", "t value", "Pr(>|t|)")
  )
  return(coefficients)
  # df.int <- ifelse(attr(z$terms, "intercept"), 1L, 0L)
  # ans$r.squared <- mss/(mss + rss)
  # ans$adj.r.squared <- 1 - (1 - ans$r.squared) * ((n - df.int)/rdf)
  # ans$fstatistic <- c(value = (mss/(p - df.int))/resvar, numdf = p - df.int, dendf = rdf)
  # ans
}

Try the rtrend package in your browser

Any scripts or data that you put into this service are public.

rtrend documentation built on June 22, 2024, 11:39 a.m.