scale.NMF: Rescaling NMF Models

View source: R/NMF-class.R

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

with D= \alpha diag(1/\delta_1, \ldots, 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))

NMF documentation built on March 31, 2023, 6:55 p.m.