# fastLm

0th

Percentile

##### Bare-bones linear model fitting function

fastLm estimates the linear model using the solve function of Armadillo linear algebra library.

Keywords
regression
##### Usage
fastLmPure(X, y)fastLm(X, …)
# S3 method for default
fastLm(X, y, …)
# S3 method for formula
fastLm(formula, data = list(), …)
##### Arguments
y

a vector containing the explained variable.

X

a model matrix.

formula

a symbolic description of the model to be fit.

data

an optional data frame containing the variables in the model.

not used

##### Details

Linear models should be estimated using the lm function. In some cases, lm.fit may be appropriate.

The fastLmPure function provides a reference use case of the Armadillo library via the wrapper functions in the RcppArmadillo package.

The fastLm function provides a more standard implementation of a linear model fit, offering both a default and a formula interface as well as print, summary and predict methods.

Lastly, one must be be careful in timing comparisons of lm and friends versus this approach based on Armadillo. The reason that Armadillo can do something like lm.fit faster than the functions in the stats package is because Armadillo uses the Lapack version of the QR decomposition while the stats package uses a modified Linpack version. Hence Armadillo uses level-3 BLAS code whereas the stats package uses level-1 BLAS. However, Armadillo will either fail or, worse, produce completely incorrect answers on rank-deficient model matrices whereas the functions from the stats package will handle them properly due to the modified Linpack code.

An example of the type of situation requiring extra care in checking for rank deficiency is a two-way layout with missing cells (see the examples section). These cases require a special pivoting scheme of “pivot only on (apparent) rank deficiency” which is not part of conventional linear algebra software.

##### Value

fastLmPure returns a list with three components:

coefficients

a vector of coefficients

stderr

a vector of the (estimated) standard errors of the coefficient estimates

df.residual

a scalar denoting the degrees of freedom in the model

fastLm returns a richer object which also includes the residuals, fitted values and call argument similar to the lm or rlm functions..

##### References

lm, lm.fit

##### Aliases
• fastLm
• fastLmPure
• fastLm.default
• fastLm.formula
##### Examples
# NOT RUN {
data(trees, package="datasets")

## bare-bones direct interface
flm <- fastLmPure( cbind(1, log(trees$Girth)), log(trees$Volume) )
print(flm)

## standard R interface for formula or data returning object of class fastLm
flmmod <- fastLm( log(Volume) ~ log(Girth), data=trees)
summary(flmmod)

## case where fastLm breaks down
dd <- data.frame(f1 = gl(4, 6, labels = LETTERS[1:4]),
f2 = gl(3, 2, labels = letters[1:3]))[-(7:8), ]
xtabs(~ f2 + f1, dd)     # one missing cell
mm <- model.matrix(~ f1 * f2, dd)
kappa(mm)                # large, indicating rank deficiency
set.seed(1)
dd\$y <- mm %*% seq_len(ncol(mm)) + rnorm(nrow(mm), sd = 0.1)
summary(lm(y ~ f1 * f2, dd))     # detects rank deficiency
summary(fastLm(y ~ f1 * f2, dd)) # some huge coefficients
# }