Compute elastic net S-estimates (PENSE estimates) along a grid of penalization levels with optional penalty loadings for adaptive elastic net.
pense( x, y, alpha, nlambda = 50, nlambda_enpy = 10, lambda, lambda_min_ratio, enpy_lambda, penalty_loadings, intercept = TRUE, bdp = 0.25, cc, add_zero_based = TRUE, enpy_specific = FALSE, other_starts, eps = 1e-06, explore_solutions = 10, explore_tol = 0.1, max_solutions = 10, comparison_tol = sqrt(eps), sparse = FALSE, ncores = 1, standardize = TRUE, algorithm_opts = mm_algorithm_options(), mscale_opts = mscale_algorithm_options(), enpy_opts = enpy_options(), cv_k = deprecated(), cv_objective = deprecated(), ... )
vector of response values of length
elastic net penalty mixing parameter with \(0 \le \alpha \le 1\).
number of penalization levels.
number of penalization levels where the EN-PY initial estimate is computed.
optional user-supplied sequence of penalization levels. If given and not
Smallest value of the penalization level as a fraction of the largest level (i.e., the
smallest value for which all coefficients are zero). The default depends on the sample
size relative to the number of variables and
optional user-supplied sequence of penalization levels at which EN-PY initial estimates are
computed. If given and not
a vector of positive penalty loadings (a.k.a. weights) for different penalization of each
coefficient. Only allowed for
include an intercept in the model.
desired breakdown point of the estimator, between 0 and 0.5.
tuning constant for the S-estimator. Default is to chosen based on the breakdown point
also consider the 0-based regularization path. See details for a description.
use the EN-PY initial estimates only at the penalization level they are computed for. See details for a description.
a list of other staring points, created by
number of solutions to compute up to the desired precision
numerical tolerance for exploring possible solutions. Should be (much) looser than
only retain up to
numeric tolerance to determine if two solutions are equal. The comparison is first done
on the absolute difference in the value of the objective function at the solution
If this is less than
use sparse coefficient vectors.
number of CPU cores to use in parallel. By default, only one CPU core is used. May not be supported on your platform, in which case a warning is given.
logical flag to standardize the
options for the MM algorithm to compute the estimates. See
options for the M-scale estimation. See
deprecated and ignored. See
ignored. See the section on deprecated parameters below.
a list-like object with the following items
the sequence of penalization levels.
a list of estimates. Each estimate contains the following information:
beta (slope) estimate.
penalization level at which the estimate is computed.
alpha hyper-parameter at which the estimate is computed.
value of the objective function at the solution.
> 0 the algorithm experienced issues when computing the estimate.
optional status message from the algorithm.
the original call.
The function supports several different strategies to compute, and use the provided starting points for optimizing the PENSE objective function.
Starting points are computed internally but can also be supplied via
By default, starting points are computed internally by the EN-PY procedure for penalization levels supplied
enpy_lambda (or the automatically generated grid of length
By default, starting points computed by the EN-PY procedure are shared for all penalization levels in
(or the automatically generated grid of length
If the starting points should be specific to the penalization level the starting points' penalization level,
enpy_specific argument to
In addition to EN-PY initial estimates, the algorithm can also use the "0-based" strategy if
add_zero_based = TRUE (by default). Here, the 0-vector is used to start the optimization at the largest
penalization level in
lambda. At subsequent penalization levels, the solution at the previous penalization level
is also used as starting point.
At every penalization level, all starting points are explored using the loose numerical tolerance
Only the best
explore_solutions are computed to the stringent numerical tolerance
Finally, only the best
max_solutions are retained and carried forward as starting points for the subsequent
Starting with version 2.0.0, cross-validation is performed by separate function
Arguments related cross-validation cause an error when supplied to
Furthermore, the following arguments are deprecated as of version 2.0.0:
pense() is called with any of these arguments, warnings detail how to replace them.
pense_cv() for selecting hyper-parameters via cross-validation.
coef.pense_fit() for extracting coefficient estimates.
plot.pense_fit() for plotting the regularization path.
Other functions to compute robust estimates:
# Compute the PENSE regularization path for Freeny's revenue data # (see ?freeny) data(freeny) x <- as.matrix(freeny[ , 2:5]) regpath <- pense(x, freeny$y, alpha = 0.5) plot(regpath)# Extract the coefficients at a certain penalization level coef(regpath, lambda = regpath$lambda)#> (Intercept) lag.quarterly.revenue price.index #> -6.6475338 0.2411667 -0.6985229 #> income.level market.potential #> 0.7098337 0.9619783# What penalization level leads to good prediction performance? cv_results <- pense_cv(x, freeny$y, alpha = 0.5, cv_repl = 2, cv_k = 4) plot(cv_results, se_mult = 1)# Extract the coefficients at the penalization level with # smallest prediction error ... coef(cv_results)#> (Intercept) lag.quarterly.revenue price.index #> -7.8411184 0.2115870 -0.7062462 #> income.level market.potential #> 0.6956763 1.0835638# ... or at the penalization level with prediction error # statistically indistinguishable from the minimum. coef(cv_results, lambda = 'se')#> (Intercept) lag.quarterly.revenue price.index #> -10.2047807 0.2111069 -0.6464577 #> income.level market.potential #> 0.6199943 1.2792788