[BioC] Anova; can I use lmFit and eBayes from Limma, or should it be aov?
john herbert
arraystruggles at gmail.com
Mon Nov 19 11:43:35 CET 2012
Dear Bioconductors,
This may be more a question of statistics understanding but it is
related to Limma.
Is it possible to perform an Anova using functions from the Limma
package? If so, how can a post hoc test be applied to the eBayes
"MArrayLM" resulting object?
For me, it is a complex design I have array data, different clients,
time course, stage of disease and treatment. The Limma manual eludes
to Limma being equivalent to Anova in some cases for single channel
arrays (on pages 35 and 41). I am using single channel data.
This code runs;
dd <- data.frame(patient=targets$patient,stage=as.factor(targets$stage),treat=as.factor(targets$treat),time=targets$time)
head(dd)
patient stage treat time
1 1 A Y 24
2 1 A Y 72
3 2 B N 24
4 2 B N 72
5 2 B N 0
6 2 B Y 72
design <- model.matrix(~patient+stage*treat*time,data=dd)
fit <- lmFit(temp,design)
fit2 <- eBayes(fit)
topTable(fit2)
ID X.Intercept. patient stageB
stageC treatY time stageB.treatY stageC.treatY
stageB.time stageC.time
A_23_P113716 A_23_P113716 17.57842 -0.0042698998 -0.18798801
-0.18726778 -0.008996453 1.282717e-03 0.38532184 0.18501711
0.0025256233 0.0005692329
A_23_P77779 A_23_P77779 17.07476 0.0015734113 -0.14199010
-0.07687905 -0.132257119 8.288697e-05 0.04068160 0.03375537
0.0024200711 0.0014022044
treatY.time stageB.treatY.time stageC.treatY.time
AveExpr F P.Value adj.P.Val
A_23_P113716 -1.340200e-03 -0.0072744604 -0.0022265946
17.49773 144347.32 6.481891e-159 2.657575e-154
A_23_P77779 -8.857291e-04 0.0008166484 -0.0004867999
17.01806 98921.73 8.930817e-153 1.830817e-148
How do I interpret the results, if I am performing Anova in Limma
correctly? What are the numbers for X.intercept and stageB etc?
If I take all probes into a variable with
top_data <- topTable(fit2,n=200000000)
and look for ones that are not significant, I don't find any.
which(top_data$adj.P.Val > 0.01)
integer(0)
So it looks like every single probe varies significantly between any
of the conditions, which my instincts say is not correct.
Maybe I should run aov like this instead? But there is still a problem
of post hoc testing as
aof2 <- function(x,y){
aov(x ~ stage*treat*time+Error(patient), y)
}
anovaresults <- apply(temp, 1, aof2,dd)
lapply(anovaresults,TukeyHSD)
Error in UseMethod("TukeyHSD") :
no applicable method for 'TukeyHSD' applied to an object of class
"c('aovlist', 'listof')"
If anyone knows how to solve either of these issues, it will be appreciated.
Thanks,
John.
More information about the Bioconductor
mailing list