R: Bare-bones linear model fitting function

fastLm {RcppArmadillo} | R Documentation

## Bare-bones linear model fitting function

### Description

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

### Usage

    fastLmPure(X, y)

    fastLm(X, ...)
    ## Default S3 method:
    fastLm(X, y, ...)
    ## S3 method for class '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..

### Author(s)

Armadillo is written by Conrad Sanderson. RcppArmadillo is written by Romain Francois, Dirk Eddelbuettel, Douglas Bates and Binxiang Ni.

### References

Armadillo project: http://arma.sourceforge.net/

### See Also

`lm`, `lm.fit`

### Examples

      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

[Package RcppArmadillo version 0.8.500.0 Index]