Learn R Programming

NMF (version 0.20.6)

scale.NMF: Rescaling NMF Models

Description

Rescales an NMF model keeping the fitted target matrix identical.

Usage

"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).

Value

an NMF object

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_1 H_1 = (W_1 D) (D^{-1} H_1) = W_2 H_2$$ 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.

Examples

Run this code


# 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))

Run the code above in your browser using DataLab