Normalize Red Channel Across Arrays Using Limma
2
0
Entering edit mode
13.0 years ago

I have gene expression measured in two biopsies each from 125 animals. One biopsy was untreated, while the other was pre-treated with a drug. The investigator hybridized untreated biopsies to the green channel of an Agilent microarray and treated biopsies to the corresponding red channels. The animals are genetically distinct, so green does not represent a uniform reference.

To get the red/green ratio, I'm using limma:

raw = read.maimages(source="agilent.median", files=file.list, wt.fun=wtAgilent)
norm = normalizeWithinArrays(raw, method="loess", bc.method="normexp", offset=50)

I would also like to normalize the red and green channels separately with normalizeBetweenArrays(). I can apparently extract the green channel only with the green.only parameter of read.maimages() , but there is no red.only parameter. What is the best (most elegant and correct) way to extract the separate channels and normalize them? I have a feeling the method="Rquantile" parameter of normalizeBetweenArrays() isn't quite what I want, but I'm not sure what is.

limma microarray agilent array • 6.0k views
ADD COMMENT
2
Entering edit mode
13.0 years ago
Dejian ★ 1.3k

There is no need for you to manually extract the red and green channel intensities for normalization. The limma function normalizeBetweenArrays does this automatically. It will normalize the two channels of arrays separately and automatically.

Normalization between arrays is not always necessary unless you have good reason. Sometimes the difference between arrays reflects biological difference, not noises.

ADD COMMENT
1
Entering edit mode

I have another method worth trying. You mentioned that green.only can help you only read the green intensities. You can reverse the color settings in the target file, and read the intensities using green.only parameter. Then what will you get? The red intensities!Right? After reading the data, possibly you need to modify some names of the list component to avoid later confusion. I think this should be the most elegant and correct way to deal with this problem.

ADD REPLY
0
Entering edit mode

Thanks, but you're describing the problem I want to solve, not the solution. normalizeBetweenArrays returns an MAList object, not a normalized version of the red and green channels separately. I want to look at the channels independently of their ratio to each other, effectively making this both a two-color and one-color array. To get normalized red/green ratio values, I'm using normalizeWithinArrays.

ADD REPLY
0
Entering edit mode

The function normalizeBetweenArrays can accept objects of numeric matrix, EListRaw, RGList or MAList. EListRaw is for one-color arrays. You can mimic one-color arrays by manully building objects of EListRaw for red and green channels. EListRaw is a list, so you can build EListRaw objects by providing the essential components of the list. I did not try it, but it should work if the EListRaw objects are correctly built.

ADD REPLY
1
Entering edit mode
13.0 years ago

Since normalizeBetweenArrays will eat any matrix you feed it, the simplest method would be to read in the full dataset and normalize R and G independently:

raw = read.maimages(source="agilent.median", files=file.list, wt.fun=wtAgilent)
red = normalizeBetweenArrays(raw$R, method="quantile")
green = normalizeBetweenArrays(raw$G, method="quantile")

Dejian, thanks for your input.

ADD COMMENT
1
Entering edit mode

This is really simple. But the background noises are not corrected. Maybe you can add one line after the first line: raw.b = backgroundCorrect(raw,method="normexp") The produced object is still an RGList. You can extract the corrected intensities for later analysis.

ADD REPLY
0
Entering edit mode

That's a good point, nice catch.

ADD REPLY
0
Entering edit mode

I agree, you can also use offset option in this function to avoid negative values - it yields NAs after log2.

ADD REPLY

Login before adding your answer.

Traffic: 2263 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6