Language: English
Last updated: 2026-06-14
This page: Model documentation
Switch: Chinese
Language switch: Chinese
MCPRegression provides MCP-penalized (Minimax Concave Penalty) linear regression (Zhang, 2010). MCP is a non-convex penalty that achieves the oracle property with a continuous penalty function — addressing both the bias of Lasso and the discontinuity of hard thresholding.
statgpu.linear_model.MCPRegression
where the MCP penalty is defined as:
with concavity parameter
MCP uses the same LLA + FISTA algorithm as SCAD:
-
Continuation path: Decrease
$\lambda$ from$\lambda_{max}$ along a geometric grid. -
LLA inner loop (1-6 iterations per
$\lambda$ ):- Compute LLA weights:
$w_j = p'_{\lambda,\gamma}(|\beta_j|) = \max(\lambda - |\beta_j|/\gamma, 0)$ - Solve weighted L1 problem via FISTA
- Compute LLA weights:
-
Warm-start: Previous
$\lambda$ 's solution as initial point.
Under regularity conditions (Zhang 2010, Theorem 1):
-
Selection consistency:
$\Pr(\hat{S} = S_0) \to 1$ - Asymptotic normality: $\sqrt{n}(\hat{\beta}{\hat{S}} - \beta{0,S_0}) \xrightarrow{d} N(0, \Sigma_0)$
MCP produces nearly unbiased estimates, with bias decreasing as
compute_inference=Falseby default (MCP does not support debiased inference)- For inference on selected variables, use the oracle approach: refit OLS on the selected support set
- Future: oracle inference and BIC-based hyperparameter selection (see TO_DO.md)
| Parameter | Default | Description |
|---|---|---|
alpha |
1.0 |
Regularization strength ( |
gamma |
3.0 |
Concavity parameter ( |
fit_intercept |
True |
Whether to fit an intercept |
max_iter |
1000 |
Maximum FISTA iterations per LLA step |
tol |
1e-4 |
Convergence tolerance |
device |
"auto" |
cpu / cuda / torch
|
solver |
"auto" |
Solver selection |
gpu_memory_cleanup |
False |
CuPy pool cleanup after fit |
from statgpu.linear_model import MCPRegression
# Basic usage
model = MCPRegression(alpha=0.1, gamma=3.0)
model.fit(X, y)
print(model.coef_) # sparse coefficients
print(model.score(X, y)) # R-squared
# GPU acceleration
model_gpu = MCPRegression(alpha=0.1, device="cuda")
model_gpu.fit(X, y)
# Tuning gamma (concavity)
model_aggressive = MCPRegression(alpha=0.1, gamma=1.5) # more aggressive thresholding| Property | Lasso | SCAD | MCP |
|---|---|---|---|
| Convexity | Convex | Non-convex | Non-convex |
| Oracle property | No | Yes | Yes |
| Bias for large |
Shrinks toward zero | Nearly unbiased | Nearly unbiased |
| Penalty continuity | Continuous | Continuous | Continuous |
| Penalty concavity | Linear (convex) | Piecewise linear-quadratic | Piecewise linear-quadratic |
| Default concavity param | — |
- Coefficients:
intercept_,coef_ - Methods:
fit,predict,score - Note:
compute_inference=Trueis not supported for MCP
- Zhang, C.-H. (2010). Nearly unbiased variable selection under minimax concave penalty. Annals of Statistics, 38(2), 894-942. https://doi.org/10.1214/09-AOS729
- Fan, J., & Li, R. (2001). Variable selection via nonconcave penalized likelihood and its oracle properties. Journal of the American Statistical Association, 96(456), 1348-1360.