[BioC] Changing results depending on context
James W. MacDonald
jmacdon at uw.edu
Tue Jun 12 15:24:07 CEST 2012
Hi January,
When you analyze all data together, the denominator of your t-statistic
is based on an average of the intra-group variability. In general this
will tend to make an analysis more powerful, because you are using more
data to compute the variance estimate (which is not a very efficient
statistic, so more data tend to improve the estimate).
Conversely, when you analyze the two groups separately, the denominator
of your t-statistic is based only on the intra-group variance for the
two groups under consideration.
Without having you data in hand, I can only guess what is going on.
However, to me the most likely cause of this is a high variance in one
or more of your 'A' groups. This would explain why when you combine the
analyses you get fewer genes in the 'B' group and more genes in the 'A'
group, and vice versa when you do things separately.
There are several ways to see if you have one or more problem chips in
the A group. You could look at MA plots using plotMA(), you could use
arrayWeights() or arrayWeightsSimple() to see if some of the arrays get
severely down-weighted. You could also do a PCA plot of the normalized M
values to look at the overall grouping structure.
Best,
Jim
On 6/12/2012 7:15 AM, January Weiner wrote:
> Dear all,
>
> I am evaluating a collection of two-color arrays. There are several
> sets corresponding to different tissues, there is a treatment (common
> for each tissue), and the treatment effect is analysed independently
> in each of the tissues. I am analysing the data using limma.
>
> The results in terms of the number of significant genes vary widely
> depending whether the tissues are analysed separately or jointly.
> Since the matter is even a bit more complicated, I include only
> pseudocode below. I guess that this depends on the background
> variation estimation in eBayes, but the trend is not consistent, e.g.
> for one tissue, more (many more!) significant results are found when
> analysed separately, and for another tissue the results are much
> "better" (ie. more singificant results) if analysed along other data.
>
> targets<- readTargets( "targets.txt" )
> # Agilent two-color microarrays
> rg.1<- read.maimages( targets, columns= list( G= "gMedianSignal",
> Gb= "gBGMedianSignal", R="rMedianSignal", Rb = "rBGMedianSignal"),
> annotation = c("Row", "Col","FeatureNum", "ControlType","ProbeName",
> "GeneName", "SystematicName", "Description" ))
> rg.2<- backgroundCorrect( rg.1, method= "normexp", offset=50 )
> rg.3<- normalizeWithinArrays( rg.2, method= "loess" )
> rg<- normalizeBetweenArrays( rg.3, method= "quantile" )
> rg<- rg[ rg$genes$ControlType == 0, ]
>
> # analysing all data together:
> t2<- targetsA2C( targets )
> design<- model.matrix( ~ 0 + t2$Target )
> colnames( design )<- levels( t2$Target )
> corfit<- intraspotCorrelation( rg, design )
> fit<- lmscFit( rg, design, correlation= corfit$consensus.correlation )
> cmtx<- makeContrasts( "A.T1-A.T2", "B.T1-B.T2", levels= design )
> fit<- contrasts.fit( fit, cmtx )
> fit<- eBayes( fit )
>
> Above, A and B are tissues, T1 and T2 are treatments.
>
> Here, some exemplary results showing the number of significant genes:
>
> adj.P.Val< 0.05:
> A.T1-A.T2: 5601
> B.T1-B.T2: 3914
>
> adj.P.Val< 1e-5
> A.T1-A.T2: 672
> B.T1-B.T2: 758
>
> Now, I analyse the data separately:
>
> A.targets<- targets[ 1:16, ]
> A.rg<- rg[ 1:16, ]
> A.t2<- targetsA2C( A.targets )
> A.design<- model.matrix( ~ 0 + A.t2$Target )
> colnames( A.design )<- levels( A.t2$Target )
> A.corfit<- intraspotCorrelation( A.rg, A.design )
> A.fit<- lmscFit( A.rg, A.design, correlation= A.corfit$consensus.correlation )
> A.cmtx<- makeContrasts( "A.T1-A.T2", levels= A.design )
> A.fit<- contrasts.fit( A.fit, cmtx )
> A.fit<- eBayes( A.fit )
>
>
> B.targets<- targets[ 17:32, ]
> B.rg<- rg[ 17:32, ]
> B.t2<- targetsA2C( B.targets )
> B.design<- model.matrix( ~ 0 + B.t2$Target )
> colnames( B.design )<- levels( B.t2$Target )
> B.corfit<- intraspotCorrelation( B.rg, B.design )
> B.fit<- lmscFit( B.rg, B.design, correlation= B.corfit$consensus.correlation )
> B.cmtx<- makeContrasts( "B.T1-B.T2", levels= B.design )
> B.fit<- contrasts.fit( B.fit, cmtx )
> B.fit<- eBayes( B.fit )
>
> Numbers of significant data are now much, much different:
>
> adj.P.Val< 0.05:
> A.T1-A.T2: 3347
> B.T1-B.T2: 5443
>
> adj.P.Val< 1e-5
> A.T1-A.T2: 108
> B.T1-B.T2: 1102
>
> six times less for tissue A, but almost 50% more for tissue B! How can this be?
>
> The log fold changes are stable (i.e., they do not change between the
> various sets), which is to be expected -- changing the context
> influences the moderated t statistics, but not the estimation of log
> fold change. However, the p-values are not simply smaller or larger,
> there is little correlation of the p-values from one context to
> another. I'm a bit lost in here.
>
> Kind regards,
>
> January
>
--
James W. MacDonald, M.S.
Biostatistician
University of Washington
Environmental and Occupational Health Sciences
4225 Roosevelt Way NE, # 100
Seattle WA 98105-6099
More information about the Bioconductor
mailing list