Skip to contents

Applies one of five normalization methods to the raw count matrix of a metaXpressStudy object.

Usage

mx_normalize(study, method = c("TMM", "VST", "CPM", "TPM", "quantile"))

Arguments

study

A metaXpressStudy object with raw counts.

method

Character scalar. Normalization method. One of "TMM" (default), "VST", "CPM", "TPM", or "quantile".

Value

The input study with the normalized values added as a new assay ("logCPM_TMM", "vst", "cpm", "tpm" or "log2_quantile"). The raw "counts" assay is never modified, because mx_de requires raw counts.

Details

Normalized values are for visualization, clustering, co-expression and cell-composition analyses. Differential expression always works from raw counts with each engine's own normalization.

  • TMM: log2 CPM with trimmed-mean-of-M-values library sizes (Robinson & Oshlack 2010), via edgeR (prior count 2).

  • VST: Variance-stabilizing transformation (Anders & Huber 2010), implemented in DESeq2. Produces approximately homoscedastic values suitable for clustering and visualization.

  • CPM: Counts per million via edgeR. Simple library-size scaling without variance stabilization.

  • TPM: Transcripts per million (Li et al. 2010). Requires gene lengths in metadata. Preferred when comparing expression levels across genes.

  • quantile: Quantile normalization (Bolstad et al. 2003), implemented in limma. Forces identical distributions across samples; operates on log2(CPM + 1) values.

References

Robinson, M.D. & Oshlack, A. (2010) A scaling normalization method for differential expression analysis of RNA-seq data. Genome Biology, 11(3), R25. doi:10.1186/gb-2010-11-3-r25

Anders, S. & Huber, W. (2010) Differential expression analysis for sequence count data. Genome Biology, 11(10), R106. doi:10.1186/gb-2010-11-10-r106

Bolstad, B.M. et al. (2003) A comparison of normalization methods for high density oligonucleotide array data based on variance and bias. Bioinformatics, 19(2), 185–193. doi:10.1093/bioinformatics/19.2.185

Examples

counts <- matrix(rpois(600, 50), nrow = 100,
                 dimnames = list(paste0("G", 1:100), paste0("S", 1:6)))
meta <- data.frame(condition = rep(c("control", "case"), each = 3))
study <- metaXpressStudy(counts, meta, accession = "local")
study <- mx_normalize(study, method = "TMM")
#>   Normalizing study local using TMM...
SummarizedExperiment::assayNames(study)
#> [1] "counts"     "logCPM_TMM"