This function performs feature normalization according to user- specified parameters.

normalize.features(siamcat,
    norm.method = c("rank.unit", "rank.std",
        "log.std", "log.unit", "log.clr", "std", "pass"),
    norm.param = list(log.n0 = 1e-06, sd.min.q = 0.1,
        n.p = 2, norm.margin = 1),
    feature.type='filtered',
    verbose = 1)

Arguments

siamcat

an object of class siamcat-class

norm.method

string, normalization method, can be one of these: 'c('rank.unit', 'rank.std', 'log.std', 'log.unit', 'log.clr', 'std', 'pass')

norm.param

list, specifying the parameters of the different normalization methods, see details for more information

feature.type

string, on which type of features should the function work? Can be either "original", "filtered", or "normalized". Please only change this paramter if you know what you are doing!

verbose

integer, control output: 0 for no output at all, 1 for only information about progress and success, 2 for normal level of information and 3 for full debug information, defaults to 1

Value

an object of class siamcat-class with normalized features

Details

There are seven different normalization methods available:

  • 'rank.unit' - converts features to ranks and normalizes each column (=sample) by the square root of the sum of ranks

  • 'rank.std' - converts features to ranks and applies z-score standardization

  • 'log.clr' - centered log-ratio transformation (with the addition of pseudocounts)

  • 'log.std' - log-transforms features (after addition of pseudocounts) and applies z-score standardization

  • 'log.unit' - log-transforms features (after addition of pseudocounts) and normalizes by features or samples with different norms

  • 'std' - z-score standardization without any other transformation

  • 'pass' - pass-through normalization will not change the features

The list entries in 'norm.param' specify the normalzation parameters, which are dependant on the normalization method of choice:

  • 'rank.unit' or 'pass' does not require any other parameters

  • 'rank.std' and 'std' requires sd.min.q, quantile of the distribution of standard deviations of all features that will be added to the denominator during standardization in order to avoid underestimation of the standard deviation, defaults to 0.1

  • 'log.clr' requires log.n0, which is the pseudocount to be added before log-transformation, defaults to NULL leading to the estimation of log.n0 from the data

  • 'log.std' requires both log.n0 and sd.min.q, using the same default values

  • 'log.unit' requires next to log.n0 also the parameters n.p and norm.margin. n.p specifies the vector norm to be used, can be either 1 for x/sum(x) or 2 for x/sqrt(sum(x^2)). The parameter norm.margin specifies the margin over which to normalize, similarly to the apply-syntax: Allowed values are 1 for normalization over features, 2 over samples, and 3 for normalization by the global maximum.

The function additionally allows to perform a frozen normalization on a different dataset. After normalizing the first dataset, the norm_feat slot in the siamcat object contains all parameters of the normalization, which you can access via the norm_params accessor.

In order to perform a frozen normalization of a new dataset, you can run the function supplying the normalization parameters as argument to norm.param: norm.param=norm_params(siamcat_reference). See also the example below.

Examples

# Example data data(siamcat_example) # Simple example siamcat_norm <- normalize.features(siamcat_example, norm.method='rank.unit')
#> Features normalized successfully.
# log.unit example siamcat_norm <- normalize.features(siamcat_example, norm.method='log.unit', norm.param=list(log.n0=1e-05, n.p=1, norm.margin=1))
#> Features normalized successfully.
# log.std example siamcat_norm <- normalize.features(siamcat_example, norm.method='log.std', norm.param=list(log.n0=1e-05, sd.min.q=.1))
#> Features normalized successfully.
# Frozen normalization siamcat_norm <- normalize.features(siamcat, norm.param=norm_params(siamcat_reference))
#> Error in (function (classes, fdef, mtable) { methods <- .findInheritedMethods(classes, fdef, mtable) if (length(methods) == 1L) return(methods[[1L]]) else if (length(methods) == 0L) { cnames <- paste0("\"", vapply(classes, as.character, ""), "\"", collapse = ", ") stop(gettextf("unable to find an inherited method for function %s for signature %s", sQuote(fdef@generic), sQuote(cnames)), domain = NA) } else stop("Internal error in finding inherited methods; didn't return a unique method", domain = NA)})(list("function"), new("standardGeneric", .Data = function (siamcat, verbose = 1) standardGeneric("filt_feat"), generic = structure("filt_feat", package = "SIAMCAT"), package = "SIAMCAT", group = list(), valueClass = character(0), signature = c("siamcat", "verbose"), default = NULL, skeleton = (function (siamcat, verbose = 1) stop("invalid call in method dispatch to 'filt_feat' (no default method)", domain = NA))(siamcat, verbose)), <environment>): unable to find an inherited method for function ‘filt_feat’ for signature ‘"function"’