Internal Routine for Fast Combinatorial Nonnegative Least-Squares

Description

This is the workhorse function for the higher-level function fcnnls, which implements the fast nonnegative least-square algorithm for multiple right-hand-sides from Van Benthem et al. (2004) to solve the following problem:

min ||Y - X K||_F, s.t. K>=0

where Y and X are two real matrices of dimension n x p and n x r respectively, and |.|_F is the Frobenius norm.

The algorithm is very fast compared to other approaches, as it is optimised for handling multiple right-hand sides.

Usage

.fcnnls(x, y, verbose = FALSE, pseudo = FALSE, eps = 0)

Arguments

x
the coefficient matrix
y
the target matrix to be approximated by X K.
verbose
logical that indicates if log messages should be shown.
pseudo
By default (pseudo=FALSE) the algorithm uses Gaussian elimination to solve the successive internal linear problems, using the solve function. If pseudo=TRUE the algorithm uses Moore-Penrose generalized pseudoinverse from the corpcor package instead of solve.
eps
threshold for considering entries as nonnegative. This is an experimental parameter, and it is recommended to leave it at 0.

Value

A list with the following elements:

coefthe fitted coefficient matrix. Psetthe set of passive constraints, as a logical matrix of the same size as K that indicates which element is positive.

References

Van Benthem M and Keenan MR (2004). "Fast algorithm for the solution of large-scale non-negativity-constrained least squares problems." _Journal of Chemometrics_, *18*(10), pp. 441-450. ISSN 0886-9383, , .