[BioC] LIMMA No residual using rmaPLM
Gordon Smyth
smyth at wehi.edu.au
Wed Sep 7 04:06:13 CEST 2005
>Date: Mon, 05 Sep 2005 13:51:38 +0300
>From: "Ron Ophir" <ron.ophir at weizmann.ac.il>
>Subject: [BioC] LIMMA No residual using rmaPLM
>To: <bioconductor at stat.math.ethz.ch>
>Message-ID: <s31c4d86.078 at wisemail.weizmann.ac.il>
>Content-Type: text/plain
>
>Hi
>I am analyzing affymetrix data having the following experimental
>design:
> > analysis$design
> Normal IOP IOPC
>L91RAE230 2.CEL 0 1 0
>L92RAE230 2.CEL 0 1 0
>L93RAE230 2.CEL 0 0 1
>L94RAE230 2.CEL 0 0 1
>L95RAE230 2.CEL 1 0 0
>L96RAE230 2.CEL 1 0 0
> and following contrasts
> > analysis$contrasts
> IOPC.IOP IOPC.Normal IOP.Normal
>Normal 0 -1 -1
>IOP -1 0 1
>IOPC 1 1 0
>The preprocessing was done using affyPLM packge
>analysis$data<-rmaPLM(analysis$raw)
>where analysis$raw is AfyyBatch object. Then I fitted the the model
>once with weighting matrix using AMP flags
>fm<-as.matrix(analysis$Flags!="A")
>analysis$fit<-lmFit(analysis$data,analysis$design,w=matrix(as.numeric(fm),dim(fm)[1],dim(fm)[2],dimnames=dimnames(fm)))
> and got a reasonable results and once without this matrix. What was
>surprising is that fitting without the weighting matrix I got the
>following error message:
> > analysis$bayes<-eBayes(analysis$contrasts.fit)
>Error in ebayes(fit = fit, proportion = proportion, stdev.coef.lim =
>stdev.coef.lim) :
> No residual degrees of freedom in linear model fits
>I've checked the fit coeffecient matrix (analyis$fit object) and is all
>NA.
>Does someone have an idea why? I did not applied any weighting matrix
>for this fitting.
As Ben has already explained, you are implicitly using a weighting matrix
here because your 'PLMset' object contains a slot 'se.chip.coefs' from
which limma is attempting to construct probe-set weights. (Basically the
weight for each expression value is the inverse squared se, with some
moderation to prevent absurd values.) You can easily turn this off by using
lmFit(..., weights=NULL)
The philosophy is this: If the se.chip.coefs slot is empty, then limma will
take the se's and hence the weights to be all equal. If however this slot
is set to be a matrix with entirely NA values, then limma will assume (and
this is the crucial thing) that the se's are not only missing but
non-ignorable. Hence it passes NA weights to the lmFit and hence you end up
with no useful data.
I am open to suggestion that limma should do something different. My
feeling which motivates the current behaviour is that slots in data objects
are only set (or should only be set) when they really mean something. Hence
they should not be ignored without specific direction to do so, even if
they contain NA values.
Gordon
>Thanks
>Ron
More information about the Bioconductor
mailing list