The result of differential gene expression analysis should be extracted based on adj.p.value ?
Entering edit mode
6.4 years ago
Raheleh ▴ 260


I am trying to analyze affymetrix microarray data (GSE27157). I did differential gene expression analysis using limma and used topTable() function to extract the top genes. I wanted to extract the genes with adj.p.value < 0.05, however filtering with this criteria returns nothing. The smallest amount for adj.p.value is 0.4 !!. Is it normal or there is a problem in my analysis? I did RMA to normalize my data and also tried with GCRMA but both returned the same result.

Could I extract based on p.value instead of adj.p.value, in this case (p.value < 0.05 and lfc = 2) it returns 111 genes.

design <- model.matrix(~0 + samples)
colnames(design) <- c("Mut", "Wt")

fit <- lmFit(eset2, design)
contrast.matrix <- makeContrasts(Mut-Wt, levels = design)
fit.con <-, contrast.matrix)
fit.eb <- eBayes(fit.con)   

dge <- topTable(fit.eb, number = 1000, lfc = 2)
dge[which(dge$P.Value < 0.05),]
dim(dge[which(dge$P.Value < 0.05),])

Any help would be great appreciated!!

limma microarray bioconductor R • 2.2k views
Entering edit mode

Hello, I am using limfit model for gene expression data but i am confused about the result. This is the first time i am using this, could anyone please help me about interpreting the results? Which part of the result should i include in my report and how to explain that part? Thanks in advance

Entering edit mode
6.4 years ago

The smallest adjusted pvalue being 0.4 is effectively saying that no gene stands out of the statistical noise. This could be because your contrast Mut-WT doesn't produce an effect on gene expression strong enough to be confidently detected (or most or all of the genes change in the same direction so you see no change, but that's less likely).

Of course, you could still select genes with p.value < 0.05 and lfc = 2 but you have to be very careful in interpreting the results because you could be discussing just false positives. This is because if there is no effect at all, p-values are uniformly distributed between 0 and 1 and out of thousands of tests you inevitably get a few with small p-value just by chance. You could see this with:

sort(runif(n= 10000, min= 0, max= 1))[1:10] # n random "p-values", show the smallest ten 
[1] 0.0003418126 0.0006121558 0.0006403907 0.0008630857 0.0008993864
[6] 0.0009852112 0.0011081123 0.0011709959 0.0013087022 0.0016921822
Entering edit mode
6.1 years ago

Could I extract based on p.value instead of adj.p.value,

Don't do this. You must adjust for multiple testing. Follow the link below to see why

It's always possible that you did nothing wrong, and there is no significant difference between your two samples.


Login before adding your answer.

Traffic: 1619 users visited in the last hour
Help About
Access RSS

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

Powered by the version 2.3.6