limma (version 3.28.14)

normalizeCyclicLoess: Normalize Columns of a Matrix by Cyclic Loess


Normalize the columns of a matrix, cyclicly applying loess normalization to normalize each pair of columns to each other.


normalizeCyclicLoess(x, weights = NULL, span=0.7, iterations = 3, method = "fast")


numeric matrix, or object which can be coerced to a numeric matrix, containing log-expression values.
numeric vector of probe weights. Must be non-negative.
span of loess smoothing window, between 0 and 1.
number of times to cycle through all pairs of columns.
character string specifying which variant of the cyclic loess method to use. Options are "fast", "affy" or "pairs".


A matrix of the same dimensions as x containing the normalized values.


This function is intended to normalize single channel or A-value microarray intensities between arrays. Cyclic loess normalization is similar effect and intention to quantile normalization, but with some advantages, in particular the ability to incorporate probe weights.

A number of variants of cylic loess have been suggested. method="pairs" implements the intuitive idea that each pair of arrays is subjected to loess normalization as for two-color arrays. This process is simply cycled through all possible pairs of arrays, then repeated for several iterations. This is the method described by Ballman et al (2004) as ordinary cyclic loess normalization.

method="affy" implements a method similar to normalize.loess in the affy package, except that here we call lowess instead of loess and avoid the use of probe subsets and the predict function. In this approach, no array is modified until a complete cycle of all pairs has been completed. The adjustments are stored for a complete iteration, then averaged, and finally used to modify the arrays. The "affy" method is invariant to the order of the columns of x, whereas the "pairs" method is not. The affy approach is presumably that used by Bolstad et al (2003), although the algorithm was not explicitly described in that article.

method="fast" implements the "fast linear loess" method of Ballman et al (2004), whereby each array is simply normalized to a reference array, the reference array being the average of all the arrays. This method is relatively fast because computational time is linear in the number of arrays, whereas "pairs" and "affy" are quadratic in the number of arrays. "fast" requires n lowess fits per iteration, where n is the number of arrays, whereas "pairs" and "affy" require n*(n-1)/2 lowess fits per iteration.


Bolstad, B. M., Irizarry R. A., Astrand, M., and Speed, T. P. (2003). A comparison of normalization methods for high density oligonucleotide array data based on bias and variance. Bioinformatics 19, 185-193.

Ballman, KV Grill, DE, Oberg, AL and Therneau, TM (2004). Faster cyclic loess: normalizing RNA arrays via linear models. Bioinformatics 20, 2778-2786.

See Also

An overview of LIMMA functions for normalization is given in 05.Normalization.

normalize.loess in the affy package also implements cyclic loess normalization, without weights.