R: Least Squares Solution under Equality and Inequality...

lsei {lsei} | R Documentation

## Least Squares Solution under Equality and Inequality Constraints

### Description

The `lsei` function solves a least squares problem under both equality and inequality constraints and implements the LSEI algorithm described in Lawson and Hanson (1974, 1995).

The `lsi` function solves a least squares problem under inequality constraints and implements the LSI algorithm described in Lawson and Hanson (1974, 1995).

The `ldp` function solves a least distance programming problem under inequality constraints and implements the LDP algorithm described in Lawson and Hanson (1974, 1995).

The `qp` function solves a quadratic programming problem, by transforming the problem into a least squares one under the same equality and inequality constraints, which is then solved by function `lsei`.

The NNLS Fortran implementation used internally is downloaded from http://www.netlib.org/lawson-hanson.

### Usage

    lsei(a, b, c=NULL, d=NULL, e=NULL, f=NULL, lower=-Inf, upper=Inf)
    lsi(a, b, e=NULL, f=NULL, lower=-Inf, upper=Inf)
    ldp(e, f, tol=1e-15)
    qp(q, p, c=NULL, d=NULL, e=NULL, f=NULL, lower=-Inf, upper=Inf, tol=1e-15)

### Arguments

`a` | Design matrix.
`b` | Response vector.
`c` | Matrix of numeric coefficients on the left-hand sides of equality constraints. If it is NULL, `c` and `d` are ignored.
`d` | Vector of numeric values on the right-hand sides of equality constraints.
`e` | Matrix of numeric coefficients on the left-hand sides of inequality constraints. If it is NULL, `e` and `f` are ignored.
`f` | Vector of numeric values on the right-hand sides of inequality constraints.
`q` | Matrix of numeric values for the quadratic term of a quadratic programming problem.
`p` | Vector of numeric values for the linear term of a quadratic programming problem.
`lower, upper` | Bounds on the solutions, as a way to specify such simple inequality constraints.
`tol` | Tolerance, for checking compatibility of inequalities in `lsi` and for calculating pseudo-rank in `qp`.

### Details

Given matrices `a`, `c` and `e`, and vectors `b`, `d` and `f`, function `lsei` solves the least squares problem under both equality and inequality constraints:

minimize || a x - b ||,

subject to c x = d, e x >= f.

Function `lsi` solves the least squares problem under inequality constraints:

minimize || a x - b ||,

subject to e x >= f.

Function `ldp` solves the least distance programming problem under inequality constraints:

minimize || x ||,

subject to e x >= f.

Function `qp` solves the quadratic programming problem:

minimize 0.5 x^T q x + p^T x,

subject to c x = d, e x >= f.

### Value

A vector of the solution values

### Author(s)

Yong Wang <yongwang@auckland.ac.nz>

### References

Lawson and Hanson (1974, 1995). Solving least squares problems. Englewood Cliffs, N.J., Prentice-Hall.

### See Also

`nnls`,`hfti`.

### Examples

    beta = c(rnorm(2), 1)
    beta[beta<0] = 0
    beta = beta / sum(beta)
    a = matrix(rnorm(18), ncol=3)
    b = a %*% beta + rnorm(3,sd=.1)
    c = t(rep(1, 3))
    d = 1
    e = diag(1,3)
    f = rep(0,3)
    lsei(a, b)                        # under no constraint
    lsei(a, b, c, d)                  # under eq. constraints
    lsei(a, b, e=e, f=f)              # under ineq. constraints
    lsei(a, b, c, d, e, f)            # under eq. and ineq. constraints
    lsei(a, b, rep(1,3), 1, lower=0)  # same solution
    q = crossprod(a)
    p = -drop(crossprod(b, a))
    qp(q, p, rep(1,3), 1, lower=0)    # same solution

    ## Example from Lawson and Hanson (1974), p.170
    a = cbind(c(.25,.5,.5,.8),rep(1,4))
    b = c(.5,.6,.7,1.2)
    e = cbind(c(1,0,-1),c(0,1,-1))
    f = c(0,0,-1)
    lsi(a, b, e, f)      # Solution: 0.6213152 0.3786848

    ## Example from Lawson and Hanson (1974), p.171:
    e = cbind(c(-.207,-.392,.599), c(2.558, -1.351, -1.206))
    f = c(-1.3,-.084,.384)
    ldp(e, f)            # Solution: 0.1268538 -0.2554018

[Package lsei version 1.2-0 Index]