bvls

Syntax

bvls(Y, X, bounds, [maxIter], [tolerance=1e-10], [intercept=true], [mode=0])

Arguments

Y is a numeric vector indicating the dependent variable.

X is a numeric vector/matrix/table/tuple indicating the independent variable(s). When X is a matrix,

  • If the number of rows equals the length of Y, each column of X is a factor.
  • If the number of rows is not the same as the length of Y, and the number of columns equals the length of Y, each row of X is a factor.

Note: The values in X and Y will be converted to DOUBLE, and the null values after the conversion will be treated as 0.

bounds is a tuple of elements ([lb, ub]) specifying the lower and upper bounds. Each element of the tuple can be:

  • A scalar: specifies the same boundary for all factors.
  • A vector: specifies boundaries for each factor individually, with the vector length equal to the number of factors.

maxIter (optional) is a positive integer indicating the maximum number of iterations before termination, defaults to the number of variables.

tolerance (optional) is a DOUBLE value indicating the convergence threshold, defaults to 1e-10. Iteration stops when either:

  • The difference in loss function values between consecutive iterations < tolerance;
  • The KKT (Karush-Kuhn-Tucker) conditions are satisfied within tolerance.

intercept (optional) is a Boolean variable indicating whether the regression includes the intercept. If it is true, the system automatically adds a column of 1 to X to generate the intercept. The default value is true.

mode (optional) is an integer indicating the contents in the output. Currently only 0 (default) is supported, returning a coefficient vector.

Details

Perform Bounded-Variable Least Squares (BVLS) regression.

Return value: A DOUBLE vector indicating the estimated coefficients.

Examples

x1 = [1, 3, 5, 7, 11, 16, 23]
x2 = [2, 8, 11, 34, 56, 54, 100]
y = [0.1, 4.2, 5.6, 8.8, 22.1, 35.6, 77.2]
bounds = (0.0, 10.0)

bvls(y, x1, bounds)
// output: [0,2.717777777777778]

bvls(y, (x1, x2), bounds)
// output: [0,1.409643685501234,0.315943584131198]

Related functions: ols