Learn R Programming

NMF (version 0.28)

nneg: Transforming from Mixed-sign to Nonnegative Data

Description

nneg is a generic function to transform a data objects that contains negative values into a similar object that only contains values that are nonnegative or greater than a given threshold.

posneg is a shortcut for nneg(..., method='posneg'), to split mixed-sign data into its positive and negative part. See description for method "posneg", in nneg.

rposneg performs the "reverse" transformation of the posneg function.

Usage

nneg(object, ...)

# S4 method for matrix nneg(object, method = c("pmax", "posneg", "absolute", "min"), threshold = 0, shift = TRUE)

posneg(...)

rposneg(object, ...)

# S4 method for matrix rposneg(object, unstack = TRUE)

Value

an object of the same class as argument object.

an object of the same type of object

Arguments

object

The data object to transform

...

extra arguments to allow extension or passed down to nneg,matrix or rposneg,matrix in subsequent calls.

method

Name of the transformation method to use, that is partially matched against the following possible methods:

pmax

Each entry is constrained to be above threshold threshold.

posneg

The matrix is split into its "positive" and "negative" parts, with the entries of each part constrained to be above threshold threshold. The result consists in these two parts stacked in rows (i.e. rbind-ed) into a single matrix, which has double the number of rows of the input matrix object.

absolute

The absolute value of each entry is constrained to be above threshold threshold.

min

Global shift by adding the minimum entry to each entry, only if it is negative, and then apply threshold.

threshold

Nonnegative lower threshold value (single numeric). See argument shit for details on how the threshold is used and affects the result.

shift

a logical indicating whether the entries below the threshold value threshold should be forced (shifted) to 0 (default) or to the threshold value itself. In other words, if shift=TRUE (default) all entries in the result matrix are either 0 or strictly greater than threshold. They are all greater or equal than threshold otherwise.

unstack

Logical indicating whether the positive and negative parts should be unstacked and combined into a matrix as pos - neg, which contains half the number of rows of object (default), or left stacked as [pos; -neg].

Methods

nneg

signature(object = "matrix"): Transforms a mixed-sign matrix into a nonnegative matrix, optionally apply a lower threshold. This is the workhorse method, that is eventually called by all other methods defined in the NMF package.

nneg

signature(object = "NMF"): Apply nneg to the basis matrix of an NMF object (i.e. basis(object)). All extra arguments in ... are passed to the method nneg,matrix.

rposneg

signature(object = "NMF"): Apply rposneg to the basis matrix of an NMF object.

See Also

pmax

Other transforms: t.NMF

Examples

Run this code
# roxygen generated flag
options(R_CHECK_RUNNING_EXAMPLES_=TRUE)


#----------
# nneg,matrix-method
#----------
# random mixed sign data (normal distribution)
set.seed(1)
x <- rmatrix(5,5, rnorm, mean=0, sd=5)
x

# pmax (default)
nneg(x)
# using a threshold
nneg(x, threshold=2)
# without shifting the entries lower than threshold
nneg(x, threshold=2, shift=FALSE)

# posneg: split positive and negative part
nneg(x, method='posneg')
nneg(x, method='pos', threshold=2)

# absolute
nneg(x, method='absolute')
nneg(x, method='abs', threshold=2)

# min
nneg(x, method='min')
nneg(x, method='min', threshold=2)

#----------
# nneg,NMF-method
#----------
# random
M <- nmfModel(x, rmatrix(ncol(x), 3))
nnM <- nneg(M)
basis(nnM)
# mixture coefficients are not affected
identical( coef(M), coef(nnM) )

#----------
# posneg
#----------
# shortcut for the "posneg" transformation
posneg(x)
posneg(x, 2)

#----------
# rposneg,matrix-method
#----------
# random mixed sign data (normal distribution)
set.seed(1)
x <- rmatrix(5,5, rnorm, mean=0, sd=5)
x

# posneg-transform: split positive and negative part
y <- posneg(x)
dim(y)
# posneg-reverse
z <- rposneg(y)
identical(x, z)
rposneg(y, unstack=FALSE)

# But posneg-transformation with a non zero threshold is not reversible
y1 <- posneg(x, 1)
identical(rposneg(y1), x)

#----------
# rposneg,NMF-method
#----------
# random mixed signed NMF model
M <- nmfModel(rmatrix(10, 3, rnorm), rmatrix(3, 4))
# split positive and negative part
nnM <- posneg(M)
M2 <- rposneg(nnM)
identical(M, M2)

Run the code above in your browser using DataLab