Learn R Programming

relaxnet (version 0.3-2)

relaxnet: Relaxation (as in Relaxed Lasso, Meinshausen 2007) applied to glmnet Models

Description

Runs glmnet once on the full x matrix, then again on each distinct subset of columns from along the solution path. The penalty may be lasso (alpha = 1) or elastic net (0 < alpha < 1). The outcome (y) may be continuous or binary.

Usage

relaxnet(x, y, family = c("gaussian", "binomial"), nlambda = 100, alpha = 1, relax = TRUE, relax.nlambda = 100, relax.max.vars = min(nrow(x), ncol(x)) * 0.8, lambda = NULL, relax.lambda.index = NULL, relax.lambda.list = NULL, ...)

Arguments

x
Input matrix, of dimension nobs x nvars; each row is an observation vector. Can be in sparse matrix format (inherit from class "sparseMatrix" as in package Matrix). Must have unique colnames.
y
response variable. Quantitative for family="gaussian". For family="binomial" should be either a factor with two levels, or a two-column matrix of counts or proportions.
family
Response type (see above).
nlambda
The number of lambda values - default is 100. Determines how fine the grid of lambda values should be.
alpha
Elastic net mixing parameter (see glmnet).
relax
Should the model be relaxed. If FALSE, only the main glmnet model is run and no relaxed models are.
relax.nlambda
Like nlambda but for secondary (relaxed) models.
relax.max.vars
Maximum number of variables for relaxed models. No relaxation will be done for subsets along the regularization path with number of variables greater than relax.max.vars. If ncol(x) > nrow(x) and alpha < 1, it may make sense to use a value > nrow(x), but this may lead to increased computation time.
lambda
See (see glmnet). Optional and meant primarily for use by cv.relaxnet.
relax.lambda.index
Vector which indexes the lambda argument and specifyies the values at which a relaxed model should be fit. Optional and meant primarily for use by cv.relaxnet. Ignored if lambda argument is NULL.
relax.lambda.list
List of lambda values to use for the relaxed models. Optional and meant primarily for use by cv.relaxnet. Ignored if lambda argument is NULL.
...
Further aruments passed to glmnet. Use with caution as this has not yet been tested. For example, setting standardize = FALSE will probably work correctly, but setting an offset probably won't.

Value

Object of class code"relaxnet" with the following components:
call
A copy of the call which produced this object
main.glmnet.fit
The object resulting from running glmnet on the entire x matrix.
relax
The value of the relax argument. If this is FALSE, then several of the other elements of this result will be set to NA.
relax.glmnet.fits
A list containing the secondary glmnet fits gotten by running glmnet on the distinct subsets of the columns of x resulting along the solution path of lambda values.
relax.num.vars
Vector giving the number of variables in each "relaxed" model.
relax.lambda.index
This vector indexes result$main.glmnet.fit$lambda and gives the lambda values at which the relax.glmnet.fits were obtained.
total.time
Total time in seconds to produce this result.
main.fit.time
Time in seconds to produce the main glmnet fit.
relax.keep
In certain cases some of the relaxed models are removed after fitting. relax.fit.times records times for these removed models as well. This logical vector shows which of the models whose timings are given in relax.fit.times were actually kept and have results given in relax.glmnet.fits above. Hopefully this will not be necessary in later versions.
relax.fit.times
Vector of times in seconds to produce secondary "relaxed" models.

Details

Version 1.9-5 of glmnet no longer allows single-column x. This broke relaxnet. As a temporary fix, relaxed models containing a single variable now just run glm instead of glmnet, and only the full least squares (or logistic regression, for family = "binomial") solution is considered for that relaxed model. All relaxed models containing more than one variable, as well as the main model, still use the complete glmnet solution path.

References

Stephan Ritter and Alan Hubbard, Tech report (forthcoming).

Jerome Friedman, Trevor Hastie, Rob Tibshirani (2010) “Regularization Paths for Generalized Linear Models via Coordinate Descent.” Journal of Statistical Software 33(1)

Nicolai Meinshausen (2007) “Relaxed Lasso” Computational Statistics and Data Analysis 52(1), 374-393

See Also

glmnet, cv.relaxnet, predict.relaxnet

Examples

Run this code
## generate predictor matrix

nobs <- 100
nvars <- 200

set.seed(23)

x <- matrix(rnorm(nobs * nvars), nobs, nvars)

## make sure it has unique colnames

colnames(x) <- paste("x", 1:ncol(x), sep = "")

## let y depend on first 5 columns plus noise

y <- rowSums(x[, 1:5]) + rnorm(nrow(x))

## default is family = "gaussian"

result1 <- relaxnet(x, y)

summary(result1)

## now fit family = "binomial" model

y.bin <- rbinom(nrow(x), 1, prob = plogis(0.2 * rowSums(x[, 1:5])))

result2 <- relaxnet(x, y.bin, family = "binomial")

summary(result2)

Run the code above in your browser using DataLab