# [BioC] limma: no residual degrees of freedom

Gordon K Smyth smyth at wehi.EDU.AU
Sat Jan 24 00:51:56 MET 2004

```Dear Juerg,

'Weights' refer to the weight that each observation gets in the residual
analyses.  Weight 1 means a full observation, 0.5 means half weights,
weight 2 is equivalent to having two observations at that value, zero
means that observation contributes nothing.  Weights below zero have no
meaning.  Weights have the same meaning in limma as in any other
regression program in R such as lm, glm etc etc.

You are creating weights which are all zero or negative and you're
surprised that eBayes doesn't give you any results?

If you look at the bottom of your email you'll see that wtflags() is only
for GenePix data.  This means that you can't use it for SMD data.

You need to consider what values the SMD FLAGS column takes and you need
to decide what actual weight you want to give to each FLAG value.  There
is no shortcut.  Then you can create a meaningful weight function for use

Gordon

> Dear Dr. Smyth,
>
> As other limma users I got a 'no residual degrees of freedom' when
> trying to calculate the Bayes statistics:
>
> fit <- lmFit(MA, design)
> contrast.matrix <- makeContrasts(R10, R40, N2L, R10-R40, R40-N2L,
> R10-N2L, levels=design) cfit <- contrasts.fit(fit, contrast.matrix)
> eb <- eBayes(cfit)
>
> As you indicated in an earliner message, the reason for this is that all
> fit\$df.residual are missing.
>
> There is this code segment in the lm.series function which is called by
> lmFit():
>
> if(!is.null(weights)) {
>         weights <- as.matrix(weights)
>         if(any(dim(weights) != dim(M))) weights <- array(weights,dim(M))
> weights[weights <= 0] <- NA
>         M[!is.finite(weights)] <- NA
>     }
>
> This replaces elements of the weight matrix which are 0 or less and also
> the corresponding elements in MA\$M with NA. My weight matrix consists of
> zeros and negative numbers which were generated when reading in the
> Stanford Microarray Database (SMD) files with the command:
>
> wt.fun=function(x) {return(x\$FLAG)})
>
> This copies the FLAG column values into the weight matrix and in the raw
> smd file this column consists of zeros and negative numbers.
>
> Modifying the wt.fun parameter of read.maimages and using
>
> wt.fun=wtflags(w=0.1)
>
> didn't work and generated an error message since there is no column
> named 'Flags', the SMD file has a 'FLAG' column. A simple change in the
> wtflags function clears all this error messages.
>
> wtflags <- function(w=0.1)
> #   Quality weights based on Flags from GenePix output
> #   Gordon Smyth
> #   9 March 2003.  Last revised 11 June 2003.
>
> function(gpr) {
> # changed "Flags" to "FLAG"
>     flagged <- (gpr[,"FLAG"] < 0)
>     w*flagged + !flagged
> }
>
> Kind regards,
> Juerg Straubhaar, PhD
> Umass Med

```