Penalized Elastic Net S/MM-Estimator of Regression

Robust penalized elastic net S and MM estimator for linear regression. The method is described in detail in Cohen Freue, G. V., Kepplinger, D., Salibian-Barrera, M., and Smucler, E. (2017) <>.

This R package implements the Penalized Elastic Net S-Estimator (PENSE) and MM-estimator (PENSEM) for linear regression.


The main functions in the package are

  • pense() … to compute a robust elastic net S-estimator for linear regression
  • pensem() … to compute a robust elastic net MM-estimator either directly from the data matrix or from an S-estimator previously computed with pense().

Both of these functions perform k-fold cross-validation to choose the optimal penalty level lambda, but the optimal balance between the L1 and the L2 penalties (the alpha parameter) needs to be pre-specified by the user.

The default breakdown point is set to 25%. If the user needs an estimator with a higher breakdown point, the delta argument in the pense_options() and initest_options() can be set to the desired breakdown point (.e.g, delta = 0.5).

The package also exports an efficient classical elastic net algorithm available via the functions elnet() and elnet_cv() which chooses an optimal penalty parameter based on cross-validation. The elastic net solution is computed either by the augmented LARS algorithm (en_options_aug_lars()) or via the Dual Augmented Lagrangian algorithm (Tomioka, et al. 2011) selected with en_options_dal() which is much faster in case of a large number of predictors (> 500) and a small number of observations (< 200).


To install the latest release from CRAN, run the following R code in the R console:


The most recent stable version as well as the developing version might not yet be available on CRAN. These can be directly installed from github using the devtools package:

# Install the most recent stable version:
# Install the (unstable) develop version:
install_github("dakep/pense-rpkg", ref = "develop")


Tomioka, R., Suzuki, T., and Sugiyama, M. (2011). Super-linear convergence of dual augmented lagrangian algorithm for sparsity regularized estimation. The Journal of Machine Learning Research, 12:1537–1586.


pense 1.2.1

  • prepare for changes to the upcoming Rcpp (make compatible with STRICT_R_HEADERS)
  • fix a bug in computing PSCs when using the augmented ridge algorithm for EN.

pense 1.2.0

  • Changed the internal scaling of the regularization parameter for pense and pensem. Note: The lambda values in this release are not the same as in previous releases!
  • Fixed a bug when standardizing predictor variables with a MAD of 0 (thanks @hadjipantelis for reporting).
  • The maximum value for the regularization parameter lambda is now chosen exactly.
  • Fixed a bug when computing "exact" principal sensitivity components.

pense 1.0.8

  • Fix error with robustbase-0.92-8 as reported by Martin Maechler.
  • Fix undefined behavior in C++ code resulting in build error on Solaris (x86).
  • Fix predict() function for pensem objects if computed from a fitted pense object.
  • Always use delta and cc specified in pense_options() for the initial estimator. Remove delta and cc arguments from initest_options() and instead add them to enpy().
  • Add further measure of the prediction performance (resid_size) to obj$cv_lambda_grid, where obj is of class pense or pensem.

pense 1.0.6:

  • Initial stable release of the package.

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


1.2.1 by David Kepplinger, 2 months ago

Report a bug at

Browse source code at

Authors: David Kepplinger [aut, cre] , Matias Salibian-Barrera [aut] , Gabriela Cohen Freue [aut] , Derek Cho [ctb]

Documentation:   PDF Manual  

GPL (>= 2) license

Imports Rcpp, robustbase, parallel, methods

Depends on Matrix

Suggests testthat, lars

Linking to Rcpp, RcppArmadillo

See at CRAN