Estimation procedure for HAL, the Highly Adaptive Lasso
X_unpenalized = NULL,
max_degree = 3,
fit_type = c("glmnet", "lassi"),
n_folds = 10,
foldid = NULL,
use_min = TRUE,
reduce_basis = NULL,
family = c("gaussian", "binomial", "cox"),
return_lasso = TRUE,
return_x_basis = FALSE,
basis_list = NULL,
lambda = NULL,
id = NULL,
offset = NULL,
cv_select = TRUE,
yolo = TRUE
matrix containing observations and covariates.
numeric vector of obervations of the outcome variable.
matrix with the same format as X, that
directly get appended into the design matrix (no basis expansion). No L-1
penalization is performed on these covariates.
The highest order of interaction terms for which the basis
functions ought to be generated. The default (
NULL) corresponds to
generating basis functions for the full dimensionality of the input matrix.
The specific routine to be called when fitting the Lasso
regression in a cross-validated manner. Choosing the
will result in a call to
will produce a (faster) call to a custom Lasso routine.
Integer for the number of folds to be used when splitting the
data for V-fold cross-validation. This defaults to 10.
An optional vector of values between 1 and
identifying what fold each observation is in. If supplied,
can be missing. When supplied, this is passed to
Determines which lambda is selected from
TRUE corresponds to
FALSE corresponds to
numeric value bounded in the open interval
(0,1) indicating the minimum proportion of 1's in a basis function column
needed for the basis function to be included in the procedure to fit the
Lasso. Any basis functions with a lower proportion of 1's than the cutoff
will be removed. This argument defaults to
NULL, in which case all
basis functions are used in the lasso-fitting stage of the HAL algorithm.
character corresponding to the error family for a
generalized linear model. Options are limited to "gaussian" for fitting a
standard linear model, "binomial" for penalized logistic regression,
"cox" for a penalized proportional hazards model. Note that in the case of
"binomial" and "cox" the argument fit_type is limited to "glmnet"; thus,
documentation of the glmnet package should be consulted for any errors
resulting from the Lasso fitting step in these cases.
logical indicating whether or not to return
glmnet fit of the lasso model.
logical indicating whether or not to return
the matrix of (possibly reduced) basis functions used in the HAL lasso fit.
The full set of basis functions generated from the input
data X (via a call to
enumerate_basis). The dimensionality of this
structure is dim = (n * 2^(d - 1)), where n is the number of observations
and d is the number of columns in X.
User-specified array of values of the lambda tuning parameter
of the Lasso L1 regression. If
will be used to automatically select a CV-optimal value of this
regularization parameter. If specified, the Lasso L1 regression model will
be fit via
glmnet, returning regularized coefficient values for each
value in the input array.
a vector of ID values, used to generate cross-validation folds for
cross-validated selection of the regularization parameter lambda.
a vector of offset values, used in fitting.
logical specifying whether the array of values
specified should be passed to
cv.glmnet in order to
pick the optimal value (based on cross-validation) (when set to
TRUE) or to simply fit along the sequence of values (or single
glmnet (when set to
Other arguments passed to
consult its documentation for a full list of options.
logical indicating whether to print one of a curated
selection of quotes from the HAL9000 computer, from the critically
acclaimed epic science-fiction film "2001: A Space Odyssey" (1968).
Object of class
hal9001, containing a list of basis
functions, a copy map, coefficients estimated for basis functions, and
timing results (for assessing computational efficiency).
The procedure uses a custom C++ implementation to generate a design
matrix consisting of basis functions corresponding to covariates and
interactions of covariates and to remove duplicate columns of indicators.
The Lasso regression is fit to this (usually) very wide matrix using either
a custom implementation (based on origami) or by a call to
n <- 100
p <- 3
x <- xmat <- matrix(rnorm(n * p)
y_prob <- plogis(3 * sin(x[
, 1]) + sin(x[
y <- rbinom(
n = n
, size = 1
, prob = y_prob)
ml_hal_fit <- fit_hal(
X = x
, Y = y
, family = "binomial"
, yolo = FALSE)
preds <- predict(ml_hal_fit
, new_data = x)