Hi all,
I'm currently re-analysing Agilent single-channel microarray data (3 paired pre/post-treatment human samples) using the limma package.
For differential expression (DE) analysis, I had previously used the eBayes method, followed by topTable to filter based on FDR<0.05 and then filtering based on FC>2 cut-off. (Method 1)
However, based on the forum posts and literature I have recently read, my understanding is that this method computes adjusted p-values independently of the FC cut-off whereas treat incorporates FC threshold in the hypothesis testing.
As a result, I am now using the treat method with fc=1.2, followed by topTreat to filter based on FDR < 0.05. (Method 2)
- Which of these 2 methods is the recommended/preferred method for DE analysis of microarray data?
- How is the estimated FC calculated based on the fc threshold parameter of treat? The literature mentions that "Setting fc=1.2 or fc=1.5 will usually cause most differentially expressed genes to have estimated fold-changes of 2-fold or greater, depending on the sample size and precision of the experiment." Is there a way to formally calculate this estimated FC?
- Also, I am using trend=TRUE and robust=TRUE. Would this be appropriate to use by default?
Thank you very much,
Nik
Here is my code:
#Design matrix
Patient <- factor(targets$Patient)
Treatment <- factor(targets$Treatment)
Sex <- factor(targets$Sex)
Status <- factor(targets$Status)
design <- model.matrix(~0 + Treatment + Patient)
fit <- lmFit(yfilt, design)
#Remove duplicate probes for the same gene symbol
#Keep the one with the largest overall expression value
o <- order(fit$Amean, decreasing = TRUE)
fit <- fit[o, ]
d <- duplicated(fit$genes$Symbol)
fit <- fit[!d, ]
#Contrast matrix
contrast.matrix <- makeContrasts(TreatmentPost - TreatmentPre, levels = design)
fit2 <- contrasts.fit(fit, contrast.matrix)
Method 1:
fit2 <- eBayes(fit2, trend = TRUE, robust = TRUE)
genelist.T <- topTable(fit2, coef = 1, number = Inf, p.value = 0.05, adjust.method = "BH")
genelist.T.filt <- filter(genelist.T, (logFC < -log2(2) | logFC > log2(2)))
Method 2
fit2 <- treat(fit2, lfc = log2(1.2), trend = TRUE, robust = TRUE)
genelist.T.filt <- topTreat(fit2, coef = 1, number = Inf, p.value = 0.05, adjust.method = "BH")
Thank you very much for your help Gordon!