R: Transforming from Mixed-sign to Nonnegative Data

nneg {NMF} | R Documentation

## 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 signature 'matrix'
    nneg(object,
        method = c("pmax", "posneg", "absolute", "min"),
        threshold = 0, shift = TRUE)

      posneg(...)

      rposneg(object, ...)

      ## S4 method for signature '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: 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]`.

### Value

an object of the same class as argument `object`.

an object of the same type of `object`

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

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

[Package NMF version 0.21.0 Index]