[BioC] problem normalizeMedians (limma)

Gordon Smyth smyth at wehi.edu.au
Wed Oct 19 12:49:27 CEST 2005


Marcus, you're right that normalizeMedianDeviations() should also have the 
same modification. In fact, on looking at these functions again after a 
couple of years, I realize that normalizeMedians() can only be sensibly be 
applied to positive matrices, in which case it is the same as 
normalizeMedianDeviations(). Hence I have retired both functions and 
replaced both with the more numerically robust 
normalizeMedianAbsDeviations(). Change is commited to Bioconductor as limma 
2.3.2.

Gordon

At 10:49 AM 19/10/2005, Marcus Davy wrote:
>Hi,
>Doe this include modifying normalizeMedianDeviations aswell for consistency.
>I suspect normalizeMedianDeviations doesn't reach R's limit as quickly.
>
>Marcus

[...]

>On 10/19/05 1:19 PM, "Gordon Smyth" <smyth at wehi.edu.au> wrote:
> >>> Date: Mon, 17 Oct 2005 18:24:47 -0400
> >>> From: Francois Pepin <fpepin at cs.mcgill.ca>
> >>> Subject: [BioC] problem normalizeMedians (limma)
> >>> To: bioconductor at stat.math.ethz.ch
> >>>
> >>> Hi everyone,
> >>>
> >>> I'm not sure what should be done about it, but I've been surprised with
> >>> the following behavior with normalizeBetweenArrays:
> >>>
> >>> (dat is an MAList here)
> >>>> dat$A[1,1]
> >>> [1] 8.796361
> >>>> dat <- normalizeBetweenArrays(dat)
> >>>> dat$A[1,1]
> >>> [1] Inf
> >>>
> >>> This is due to the fact that I've got almost 400 arrays here. The
> >>> normalizeMedians(x) (which is called by normalizeBetweenArrays) has the
> >>> following behavior:
> >>>
> >>>     a.med <- apply(x, 2, median, na.rm = TRUE)
> >>>     a.med <- a.med/(prod(a.med))^(1/narrays)
> >>>
> >>> multiplying 400 relatively small numbers can easily reach R's limit as
> >>> far as doubles are concerned.
> >>>
> >>>> 6^400
> >>> [1] Inf
> >>>
> >>> Wouldn't it be better to be working in log space instead?
> >
> > Yes, you're right. In limma 2.3.2 I will change
> >
> >     (prod(a.med))^(1/narrays)
> >
> > to
> >
> >     exp(mean(log(a.med)))
> >
> > which should make floating underflow very unlikely.
> >
> > BTW, the "scale" method has been the default for normalizeBetweenArrays()
> > for historic reasons, inherited from the older sma package. I'm going to
> > change the default to "Aquantile".
> >
> > Gordon
> >
> >>> Francois

[...]



More information about the Bioconductor mailing list