Dear Dr. Smyth,
I am analysing a series of two-colour microarray data sets with limma.
The sets were downloaded from SMD (Standford Microarray Database) and
I read the data with the command:
targets <- readTargets('N20targets.txt')
RG<-read.maimages(targets$FileName, source="smd", fill=T,
wt.fun=function(x) {return(x$FLAG)})
After reading the gal file and layout I proceeded with the
normalization:
MA<-normalizeWithinArrays(RG)
This function terminated prematurely with an 'out of bounds' error. I
found the error in the printtiploess code block of the
normalizeWithinArrays function. The layout with 8 X 4 print grids,
each containing 650 spots, provides for 20800 spots. The chips I am
using have 20736 spots. I added a small amount of code to your
normalizeWithinArrays() which eliminated the error. The code I added
is (after #comment)
printtiploess = {^M
if(is.null(layout)) stop("Layout argument not
specified")^M
ngr <- layout$ngrid.r^M
ngc <- layout$ngrid.c^M
nspots <- layout$nspot.r * layout$nspot.c^M
for (j in 1:narrays) {^M
spots <- 1:nspots^M
for (gridr in 1:ngr)^M
for (gridc in 1:ngc) {^M
# modified: SMD data files smaller than ngr * ngc * spots!^M
if(spots[nspots] > nrow(object$M)) {^M
index <- spots[1]^M
spots <- index:nrow(object$M)^M
}^M
y <- object$M[spots,j]^M
x <- object$A[spots,j]^M
w <- weights[spots,j]^M
object$M[spots,j] <-
loessFit(y,x,w,span=span,iterations=iterations)$residuals^M
spots <- spots + nspots^M
}^M
}^M
},^M
I am using limma version limma_1.3.13.
Kind regards,
Juerg Straubhaar, PhD
Umass Med
Dear Juerg,
The problem that you mention arises from the fact that SMD does not
store
blank spots, i.e., rows corresponding to blank spots are removed from
the
database. Limma doesn't cope with this because it assumes complete
arrays.
On the other hand, the marrayNorm package does have a facility to
handle
this using the 'subset' slot of the marrayRaw object. Beware though
that if
you use marrayNorm, bugs in the treatment of weights (FLAGs) means
that you
will have to normalize your arrays one at a time.
Thanks for forwarding the code fix. I'm not sure that the simple fix
that
you've implemented will always allocate spots to the correct tip
groups
though. I have been discussing with Jean Yang how to bring the the
'subset'
concept into limma, but it is some way off.
Gordon
At 09:06 AM 21/01/2004, Straubhaar, Juerg wrote:
>Dear Dr. Smyth,
>
>I am analysing a series of two-colour microarray data sets with
limma. The
>sets were downloaded from SMD (Standford Microarray Database) and I
read
>the data with the command:
>
>targets <- readTargets('N20targets.txt')
>RG<-read.maimages(targets$FileName, source="smd", fill=T,
>wt.fun=function(x) {return(x$FLAG)})
>
>After reading the gal file and layout I proceeded with the
normalization:
>
>MA<-normalizeWithinArrays(RG)
>
>This function terminated prematurely with an 'out of bounds' error. I
>found the error in the printtiploess code block of the
>normalizeWithinArrays function. The layout with 8 X 4 print grids,
each
>containing 650 spots, provides for 20800 spots. The chips I am using
have
>20736 spots. I added a small amount of code to your
>normalizeWithinArrays() which eliminated the error. The code I added
is
>(after #comment)
>
> printtiploess = {^M
> if(is.null(layout)) stop("Layout argument not
specified")^M
> ngr <- layout$ngrid.r^M
> ngc <- layout$ngrid.c^M
> nspots <- layout$nspot.r * layout$nspot.c^M
> for (j in 1:narrays) {^M
> spots <- 1:nspots^M
> for (gridr in 1:ngr)^M
> for (gridc in 1:ngc) {^M
># modified: SMD data files smaller than ngr * ngc * spots!^M
> if(spots[nspots] > nrow(object$M)) {^M
> index <- spots[1]^M
> spots <- index:nrow(object$M)^M
> }^M
> y <- object$M[spots,j]^M
> x <- object$A[spots,j]^M
> w <- weights[spots,j]^M
> object$M[spots,j] <-
> loessFit(y,x,w,span=span,iterations=iterations)$residuals^M
> spots <- spots + nspots^M
> }^M
> }^M
> },^M
>
>I am using limma version limma_1.3.13.
>
>Kind regards,
>Juerg Straubhaar, PhD
>Umass Med