Efficient Solvers for SLOPE in R, Python, Julia, and C++
Johan Larsson, Malgorzata Bogdan, Krystyna Grzesiak, Mathurin Massias, Jonas Wallin
TL;DR
This work presents a fast, memory-efficient suite of SLOPE solvers across R, Python, Julia, and C++ that tackle generalized linear models with the sorted $\ell_1$ penalty. It hinges on a hybrid proximal gradient/coordinate descent algorithm that updates cluster-structured coefficients, extended to GLMs via IRLS, and it emphasizes full path fitting, cross-validation, and robust convergence via a duality-gap criterion. The authors show substantial speedups over existing implementations through a C++ core with language wrappers, efficient data handling (dense, sparse, out-of-core), and strong screening rules, supported by extensive benchmarks on simulated and real data, plus a real-world metabolomics application. The practical impact is a scalable, cross-language tool for SLOPE that enables fast model selection, interpretable clustering of coefficients, and seamless integration into biomedical data analyses and beyond.
Abstract
We present a suite of packages in R, Python, Julia, and C++ that efficiently solve the Sorted L-One Penalized Estimation (SLOPE) problem. The packages feature a highly efficient hybrid coordinate descent algorithm that fits generalized linear models (GLMs) and supports a variety of loss functions, including Gaussian, binomial, Poisson, and multinomial logistic regression. Our implementation is designed to be fast, memory-efficient, and flexible. The packages support a variety of data structures (dense, sparse, and out-of-memory matrices) and are designed to efficiently fit the full SLOPE path as well as handle cross-validation of SLOPE models, including the relaxed SLOPE. We present examples of how to use the packages and benchmarks that demonstrate the performance of the packages on both real and simulated data and show that our packages outperform existing implementations of SLOPE in terms of speed.
