[BioC] LIMMA No residual using rmaPLM

Ron Ophir ron.ophir at weizmann.ac.il
Wed Sep 14 11:29:19 CEST 2005

>>>> Gordon Smyth <smyth at wehi.edu.au> 09/07/05 5:06 AM >>>
>>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
>>I am analyzing affymetrix data having the following experimental
>> > 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
>>where analysis$raw is AfyyBatch object. Then I fitted the model
>>once with weighting matrix using AMP flags
>>   and got a reasonable results and once without this matrix. What
>>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
>>Does someone have an idea why? I did not applied any weighting
>>for this fitting.
>As Ben has already explained, you are implicitly using a weighting
>here because your 'PLMset' object contains a slot 'se.chip.coefs' from

>which limma is attempting to construct probe-set weights. (Basically
>weight for each expression value is the inverse squared se, with some

>moderation to prevent absurd values.) You can easily turn this off by
>    lmFit(..., weights=NULL)
>The philosophy is this: If the se.chip.coefs slot is empty, then limma
>take the se's and hence the weights to be all equal. If however this
>is set to be a matrix with entirely NA values, then limma will assume
>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
>are only set (or should only be set) when they really mean something.
>they should not be ignored without specific direction to do so, even
>they contain NA values.

Thanks Gordon and Ben

Conceptually, you right Gordon that is the idea of OOP. The responsible
for the data is on the object encapsulates them and if there are some
NAs they may have meaningful. However if 
sum(apply(is.na(PLMset at se.chip.coefs),1,sum)) equals to
dim(PLMset at se.chip.coefs)[1]*dim(PLMset at se.chip.coefs)[2] 
it might indicate a logical bug and hence no use for such data.
I'll be aware of this next time.



More information about the Bioconductor mailing list