| clsp | R Documentation |
The Convex Least Squares Programming (CLSP) estimator solves underdetermined, ill-posed, or structurally constrained least-squares problems using a modular two-step approach. The first step computes a pseudoinverse-based estimate, and the second step applies a convex correction (Lasso, Ridge, or Elastic Net) to ensure numerical stability, constraint enforcement, and interpretability.
clsp(
problem = "",
C = NULL,
S = NULL,
M = NULL,
b = NULL,
m = NULL,
p = NULL,
i = 1L,
j = 1L,
zero_diagonal = FALSE,
r = 1L,
Z = NULL,
rcond = FALSE,
tolerance = NULL,
iteration_limit = NULL,
final = TRUE,
alpha = NULL,
...
)
problem |
character scalar, optional Structural template for matrix construction. One of:
|
C, S, M |
numeric matrix or |
b |
numeric vector or |
m, p |
integer scalar or |
i, j |
integer scalar, default = |
zero_diagonal |
logical scalar, default = |
r |
integer scalar, default = |
Z |
numeric matrix or |
rcond |
numeric scalar or logical scalar, default = |
tolerance |
numeric scalar or |
iteration_limit |
integer scalar or |
final |
logical scalar, default = |
alpha |
numeric scalar, numeric vector, or
|
... |
Optional. Additional arguments passed to the CVXR solver backend. |
This estimator unifies pseudoinverse-based least squares with convex
programming correction. The pseudoinverse step computes an initial solution
\mathbf{z}^{(r)} iteratively via the Moore–Penrose or Bott–Duffin
inverse. The convex step then refines \boldsymbol{z} by minimizing a
mixed \ell_1/\ell_2 norm under equality constraints
\mathbf{A}\mathbf{z} = \mathbf{b}. The method supports allocation
problems (AP), constrained modular least squares (CMLS), and general CLSP
formulations.
An object of class "clsp" representing the fitted
Convex Least Squares Programming (CLSP) model.
The object is a named list containing all initialized fields and
solver results.
Class-specific methods such as summary.clsp(),
corr.clsp(), and ttest.clsp() can be used to
extract, analyze, and summarize the results.
CVXR
## Not run:
## Example: CMLS (RP) estimation with stationary-point constraints
set.seed(123456789)
# sample (dataset)
k <- 500L # number of observations
p <- 6L # number of regressors
c0 <- 1 # sum of coefficients
D <- matrix(NA_real_, nrow = k, ncol = p)
D[, 1] <- 1.0 # constant
D[, 2:p] <- matrix(rnorm(k * (p - 1)), k, p - 1)
b_true <- rnorm(p)
b_true <- (b_true / sum(b_true)) * c0 # normalize to sum = c
e <- matrix(rnorm(k), ncol = 1)
y <- D %*% b_true + e
# build blocks for CLSP (CMLS)
b <- rbind(
matrix(c0, ncol = 1), # sum of coefficients
matrix(0, nrow = k - 2, ncol = 1),
matrix(0, nrow = k - 1, ncol = 1),
matrix(y, ncol = 1)
)
C <- rbind(
matrix(1, nrow = 1, ncol = p), # row of ones
diff(D, differences = 2), # 2nd differences
diff(D, differences = 1) # 1st differences
)
# diagonal sign-matrix for 2nd differences
S <- rbind(
matrix(0, nrow = 1, ncol = k - 2),
diag(sign(diff(as.numeric(y), differences = 2))),
matrix(0, nrow = k - 1, ncol = k - 2)
)
# model
model <- rclsp::clsp(
problem = "cmls",
b = b,
C = C,
S = S,
M = D,
r = 1L, # no refinement
alpha = 1.0 # MNBLUE solution
)
# results
print("true beta (x_M):")
print(round(b_true, 4))
print("beta hat (x_M hat):")
print(round(model$x, 4))
print(model)
# bootstrap t-test
tt <- rclsp::ttest(
model,
sample_size = 30L,
seed = 123456789L,
distribution = rnorm,
partial = TRUE
)
print("Bootstrap t-test:")
print(tt)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.