Learn R Programming

NMF (version 0.2.2)

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

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

posneg(...)

rposneg(object, ...)

## S3 method for class 'matrix': rposneg(object, unstack = TRUE)

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: [object Object],[object Object],[object Object],[object Object]
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 ma
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]

Value

  • an object of the same class as argument object.

    an object of the same type of 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