fcnnls  R Documentation 
This function solves the following nonnegative least square linear problem using normal equations and the fast combinatorial strategy from Van Benthem et al. (2004):
\begin{array}{l} \min \Y  X K\_F\\ \mbox{s.t. }
K>=0 \end{array}
where Y
and X
are two real matrices of
dimension n \times p
and n \times r
respectively, and \.\_F
is the
Frobenius norm.
The algorithm is very fast compared to other approaches, as it is optimised for handling multiple righthand sides.
fcnnls(x, y, ...)
## S4 method for signature 'matrix,matrix'
fcnnls(x, y, verbose = FALSE,
pseudo = TRUE, ...)
... 
extra arguments passed to the internal
function 
verbose 
toggle verbosity (default is

x 
the coefficient matrix 
y 
the target matrix to be approximated by 
pseudo 
By default ( 
Within the NMF
package, this algorithm is used
internally by the SNMF/R(L) algorithm from Kim et
al. (2007) to solve general Nonnegative Matrix
Factorization (NMF) problems, using alternating
nonnegative constrained leastsquares. That is by
iteratively and alternatively estimate each matrix
factor.
The algorithm is an active/passive set method, which
rearrange the righthand side to reduce the number of
pseudoinverse calculations. It uses the unconstrained
solution K_u
obtained from the unconstrained least
squares problem, i.e. \min \Y  X K\_F^2
, so as to determine the initial passive
sets.
The function fcnnls
is provided separately so that
it can be used to solve other types of nonnegative least
squares problem. For faster computation, when multiple
nonnegative least square fits are needed, it is
recommended to directly use the function
.fcnnls
.
The code of this function is a port from the original MATLAB code provided by Kim et al. (2007).
A list containing the following components:
x 
the estimated optimal matrix 
fitted 
the fitted matrix 
residuals 
the residual matrix 
deviance 
the residual sum of squares between the
fitted matrix 
passive 
a 
pseudo 
a logical that
is 
signature(x = "matrix", y =
"matrix")
: This method wraps a call to the internal
function .fcnnls
, and formats the results in a
similar way as other lestsquares methods such as
lm
.
signature(x = "numeric", y =
"matrix")
: Shortcut for fcnnls(as.matrix(x), y,
...)
.
signature(x = "ANY", y = "numeric")
:
Shortcut for fcnnls(x, as.matrix(y), ...)
.
Original MATLAB code : Van Benthem and Keenan
Adaption of MATLAB code for SNMF/R(L): H. Kim
Adaptation to the NMF package framework: Renaud Gaujoux
Original MATLAB code from Van Benthem and Keenan, slightly modified by H. Kim:(http://www.cc.gatech.edu/~hpark/software/fcnnls.m)
Van Benthem M and Keenan MR (2004). "Fast algorithm for the solution of largescale nonnegativityconstrained least squares problems." _Journal of Chemometrics_, *18*(10), pp. 441450. ISSN 08869383, <URL: http://dx.doi.org/10.1002/cem.889>, <URL: http://doi.wiley.com/10.1002/cem.889>.
Kim H and Park H (2007). "Sparse nonnegative matrix factorizations via alternating nonnegativityconstrained least squares for microarray data analysis." _Bioinformatics (Oxford, England)_, *23*(12), pp. 1495502. ISSN 14602059, <URL: http://dx.doi.org/10.1093/bioinformatics/btm134>, <URL: http://www.ncbi.nlm.nih.gov/pubmed/17483501>.
nmf
## Define a random nonnegative matrix matrix
n < 200; p < 20; r < 3
V < rmatrix(n, p)
## Compute the optimal matrix K for a given X matrix
X < rmatrix(n, r)
res < fcnnls(X, V)
## Compute the same thing using the MoorePenrose generalized pseudoinverse
res < fcnnls(X, V, pseudo=TRUE)
## It also works in the case of single vectors
y < runif(n)
res < fcnnls(X, y)
# or
res < fcnnls(X[,1], y)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.