These update rules, defined for the
`NMFns-class`

model `V \approx W S H`

from Pascual-Montano et al. (2006), that
introduces an intermediate smoothing matrix to enhance
sparsity of the factors.

`nmf_update.ns_R`

implements the same updates in
*plain R*.

Algorithms ‘nsNMF’ and ‘.R#nsNMF’ provide
the complete NMF algorithm from Pascual-Montano et
al. (2006), using the C++-optimised and plain R updates
`nmf_update.brunet`

and
`nmf_update.brunet_R`

respectively. The
stopping criterion is based on the stationarity of the
connectivity matrix.

nmf_update.ns(i, v, x, copy = FALSE, ...) nmf_update.ns_R(i, v, x, ...) nmfAlgorithm.nsNMF_R(..., .stop = NULL, maxIter = 2000, stopconv = 40, check.interval = 10) nmfAlgorithm.nsNMF(..., .stop = NULL, maxIter = 2000, copy = FALSE, stopconv = 40, check.interval = 10)

- i
- current iteration number.
- v
- target matrix.
- x
- current NMF model, as an
`NMF-class`

object. - copy
- logical that indicates if the update should
be made on the original matrix directly (
`FALSE`

) or on a copy (`TRUE`

- default). With`copy=FALSE`

the memory footprint is very small, and some speed-up may be achieved in the case of big matrices. However, greater care should be taken due the side effect. We recommend that only experienced users use`copy=TRUE`

. - ...
- extra arguments. These are generally not used
and present only to allow other arguments from the main
call to be passed to the initialisation and stopping
criterion functions (slots
`onInit`

and`Stop`

respectively). - .stop
- specification of a stopping criterion, that
is used instead of the one associated to the NMF
algorithm. It may be specified as:
- the access key of a registered stopping criterion;
- a
single integer that specifies the exact number of
iterations to perform, which will be honoured unless a
lower value is explicitly passed in argument
`maxIter`

. - a single numeric value that
specifies the stationnarity threshold for the objective
function, used in with
`nmf.stop.stationary`

; - a function with signature
`(object="NMFStrategy", i="integer", y="matrix", x="NMF", ...)`

, where`object`

is the`NMFStrategy`

object that describes the algorithm being run,`i`

is the current iteration,`y`

is the target matrix and`x`

is the current value of the NMF model.

- maxIter
- maximum number of iterations to perform.
- stopconv
- number of iterations intervals over which the connectivity matrix must not change for stationarity to be achieved.
- check.interval
- interval (in number of iterations) on which the stopping criterion is computed.

an `NMFns-class`

model object.

`nmf_update.ns`

computes the updated nsNMF model. It
uses the optimized *C++* implementations
`nmf_update.KL.w`

and
`nmf_update.KL.h`

to update `W`

and
`H`

respectively.

The multiplicative updates are based on the updates
proposed by Brunet et al. (2004), except that the
NMF estimate `W H`

is replaced by `W S H`

and
`W`

(resp. `H`

) is replaced by `W S`

(resp.
`S H`

) in the update of `H`

(resp. `W`

).

See `nmf_update.KL`

for more details on the
update formula.

Pascual-Montano A, Carazo JM, Kochi K, Lehmann D and Pascual-marqui RD (2006). "Nonsmooth nonnegative matrix factorization (nsNMF)." _IEEE Trans. Pattern Anal. Mach. Intell_, *28*, pp. 403-415.

Brunet J, Tamayo P, Golub TR and Mesirov JP (2004).
"Metagenes and molecular pattern discovery using matrix
factorization." _Proceedings of the National Academy of
Sciences of the United States of America_, *101*(12), pp.
4164-9. ISSN 0027-8424,