These are the basic computing engines called by lm
used
to fit linear models. These should usually not be used
directly unless by experienced users. .lm.fit()
is bare bone
wrapper to the innermost QR-based C code, on which
glm.fit
and lsfit
are based as well, for
even more experienced users.
lm.fit (x, y, offset = NULL, method = "qr", tol = 1e-7,
singular.ok = TRUE, …)lm.wfit(x, y, w, offset = NULL, method = "qr", tol = 1e-7,
singular.ok = TRUE, …)
.lm.fit(x, y, tol = 1e-7)
design matrix of dimension n * p
.
vector of observations of length n
, or a matrix with
n
rows.
vector of weights (length n
) to be used in the fitting
process for the wfit
functions. Weighted least squares is
used with weights w
, i.e., sum(w * e^2)
is minimized.
(numeric of length n
). This can be used to
specify an a priori known component to be included in the
linear predictor during fitting.
currently, only method = "qr"
is supported.
tolerance for the qr
decomposition. Default
is 1e-7.
logical. If FALSE
, a singular model is an
error.
currently disregarded.
a list
with components (for lm.fit
and lm.wfit
)
p
vector
n
vector or matrix
n
vector or matrix
n
vector of orthogonal single-df
effects. The first rank
of them correspond to non-aliased
coefficients, and are named accordingly.
n
vector --- only for the *wfit*
functions.
integer, giving the rank
degrees of freedom of residuals
the QR decomposition, see qr
.
Fits without any columns or non-zero weights do not have the effects and qr components.
.lm.fit() returns a subset of the above, the qr part unwrapped, plus a logical component pivoted indicating if the underlying QR algorithm did pivot.
lm
which you should use for linear least squares regression,
unless you know better.
# NOT RUN {
require(utils)
# }
# NOT RUN {
<!-- %% FIXME: Do something more sensible (non-random data) !! -->
# }
# NOT RUN {
set.seed(129)
n <- 7 ; p <- 2
X <- matrix(rnorm(n * p), n, p) # no intercept!
y <- rnorm(n)
w <- rnorm(n)^2
str(lmw <- lm.wfit(x = X, y = y, w = w))
str(lm. <- lm.fit (x = X, y = y))
# }
# NOT RUN {
if(require("microbenchmark")) {
mb <- microbenchmark(lm(y~X), lm.fit(X,y), .lm.fit(X,y))
print(mb)
boxplot(mb, notch=TRUE)
}
# }
# NOT RUN {
<!-- %% do an example which sets 'tol' and gives a difference! -->
# }
Run the code above in your browser using DataLab