R: Rescaling NMF Models

scale.NMF {NMF} | R Documentation

## Rescaling NMF Models

### Description

Rescales an NMF model keeping the fitted target matrix identical.

### Usage

      ## S3 method for class 'NMF'
     scale(x, center = c("basis", "coef"),
        scale = 1)

### Arguments

`x` | an NMF object
`center` | either a numeric normalising vector delta, or either `'basis'` or `'coef'`, which respectively correspond to using the column sums of the basis matrix or the inverse of the row sums of the coefficient matrix as a normalising vector. If numeric, `center` should be a single value or a vector of length the rank of the NMF model, i.e. the number of columns in the basis matrix.
`scale` | scaling coefficient applied to D, i.e. the value of alpha, or, if `center='coef'`, the value of 1/alpha (see section Details).

### Details

Standard NMF models are identifiable modulo a scaling factor, meaning that the basis components and basis profiles can be rescaled without changing the fitted values:

X = W H = (W D) (D^-1 H)

with D= alpha * diag(1/delta_1, ..., 1/delta_r)

The default call `scale(object)` rescales the basis NMF object so that each column of the basis matrix sums up to one.

### Value

an NMF object

### Examples

    # random 3-rank 10x5 NMF model
    x <- rnmf(3, 10, 5)

    # rescale based on basis
    colSums(basis(x))
    colSums(basis(scale(x)))

    rx <- scale(x, 'basis', 10)
    colSums(basis(rx))
    rowSums(coef(rx))

    # rescale based on coef
    rowSums(coef(x))
    rowSums(coef(scale(x, 'coef')))
    rx <- scale(x, 'coef', 10)
    rowSums(coef(rx))
    colSums(basis(rx))

    # fitted target matrix is identical but the factors have been rescaled
    rx <- scale(x, 'basis')
    all.equal(fitted(x), fitted(rx))
    all.equal(basis(x), basis(rx))

[Package NMF version 0.20.6 Index]