Hi, I'm doing a differential expression analysis to RNA-seq data with limma - voom. Unfortunately, I do not have acceess to the raw counts, just normalized TPM data.
I know that all libraries, including DESeq2 and limma, expect raw counts and they don't perform very good when receiving nromalized data. This is my first time using limma ( I usually prefare DESeq2) so please bear with me.
Nontheless, I did the analysis according to the bioconductor guide, but without the CPM or logCPM part cause that wont work with TPM.
Despite all this, my results still make little sense, I'm lost here and cant actually point at what is wrong. The TPM data has 28000 genes, the analysis result says that 26000 of these are differentialy expressed !! which is way too much I guess, this never happened with me before and I suspect it's due to the normallized data. Or am I using the data in a false way?
Here is my code, hope it helps:
## Remove all zero rows and noise genes
TPM <- TPM[rowSums(TPM[])>0,]
thresh <- TPM > 0.5
keep <- rowSums(thresh) >= 2
table(keep)
TPM <- TPM[keep,]
## Design and Contrast
design <- model.matrix(~Response, Metadata)
contrast <- matrix(c(1 ,0), ncol = 1)
dimnames(contrast) <- list(c('Response', 'No Response'), 'Diff')
## Voom - Make RNA-seq follow normal distribution
Voom <- voom(TPM, design, plot = TRUE)
vfit <- lmFit(Voom, design)
vfit <- contrasts.fit(vfit, contrasts = contrast)
efit <- eBayes(vfit)
plotSA(efit, main = 'final model: Mean-Variance trend')
summary(decideTests(efit))
deg <- topTable(efit, coef = 'Diff', p.value = 0.05, adjust.method = 'fdr',
number = Inf)
And checkout this volcano plot, it is not showing the down regulated genes ( there are 9581 of those), only upregulated LFC
EnhancedVolcano(deg,
lab = rownames(deg),
x = 'logFC',
y = 'adj.P.Val',
labSize=4,
FCcutoff=2 )
