Fit first a ridge regression with cross-validation to determine adaptive weights,
then run an adaptive lasso with this penalty weighting.
BIC or cross-validation could either be used for the adaptive lasso for
variable selection.
Can deal with very large sparse data matrices.
Intended for binary reponse only (option family = "binomial"
is forced).
Depends on the glmnet
and relax.glmnet
function from the package
glmnet
.
adapt_ridge(
x,
y,
gamma = 1,
criterion = "bic",
maxp = 50,
path = TRUE,
nfolds = 5,
foldid = NULL,
betaPos = TRUE,
...
)
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
).
Binary response variable, numeric.
Tunning parameter to defined the penalty weights. See details below. Default is set to 1.
Character, indicates which criterion is used with the adaptive lasso for variable selection. Could be either "bic" or "cv". Default is "bic"
Used only if criterion
= "bic", ignored if criterion
= "cv".
A limit on how many relaxed coefficients are allowed. Default is 50, in glmnet
option default is 'n-3', where 'n' is the sample size.
Used only if criterion
= "bic", ignored if criterion
= "cv".
Since glmnet
does not do stepsize optimization, the Newton
algorithm can get stuck and not converge, especially with relaxed fits.
With path=TRUE
, each relaxed fit on a particular set of variables
is computed pathwise using the original sequence of lambda values
(with a zero attached to the end). Default is path=TRUE
.
Used for the cross-validation in ridge regression and if
criterion
= "cv".
Number of folds - default is 5. Although nfolds
can be
as large as the sample size (leave-one-out CV), it is not recommended for
large datasets. Smallest value allowable is nfolds=3
.
Used for the cross-validation in ridge regression and if
criterion
= "cv".
An optional vector of values between 1 and nfolds
identifying what fold each observation is in. If supplied, nfolds
can
be missing.
Should the covariates selected by the procedure be
positively associated with the outcome ? Default is TRUE
.
Other arguments that can be passed to glmnet
from package glmnet
other than penalty.factor
, alpha
,
family
, maxp
and path
.
An object with S3 class "adaptive"
.
Numeric vector of penalty weights derived from ridge regression. Length equal to nvars.
Character, same as input. Could be either "bic" or "cv".
Numeric vector of regression coefficients in the adaptive lasso.
If criterion
= "cv" the regression coefficients are PENALIZED, if
criterion
= "bic" the regression coefficients are UNPENALIZED.
Length equal to nvars. Could be NA if adaptive weights are all equal to infinity.
Character vector, names of variable(s) selected
with this adaptive approach.
If betaPos = TRUE
, this set is the covariates with a positive regression
coefficient in beta
.
Else this set is the covariates with a non null regression coefficient in beta
.
If criterion
= "bic", covariates are ordering according to magnitude of their regression
coefficients absolute value in the adaptive lasso.
If criterion
= "bic", covariates are ordering according to the p-values (two-sided if betaPos = FALSE
,
one-sided if betaPos = TRUE
) in the classical multiple logistic regression
model that minimzes the BIC in the adaptive lasso.
The adaptive weight for a given covariate i is defined by $$w_i = 1/|\beta^{L2}_i|^\gamma$$ where \(\beta^L2_i\) is the PENALIZED ridge regression coefficient associated to covariate i obtained with cross-validation.
# NOT RUN {
set.seed(15)
drugs <- matrix(rbinom(100*20, 1, 0.2), nrow = 100, ncol = 20)
colnames(drugs) <- paste0("drugs",1:ncol(drugs))
ae <- rbinom(100, 1, 0.3)
ar <- adapt_ridge(x = drugs, y = ae, criterion = "cv", nfolds = 3)
# }
Run the code above in your browser using DataLab