scale.NMF: Rescaling NMF Models

Description Usage Arguments Details Value Examples

View source: R/NMF-class.R

Description

Rescales an NMF model keeping the fitted target matrix identical.

Usage

1
2
3
  ## 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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 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))

renozao/NMF documentation built on Aug. 21, 2018, 3:42 a.m.