This is a test version of Biostars. For the public version, visit https://www.biostars.org.
How to choose threshold for filtering low counts before Voom transformation?

Greetings,

I'm currently performing a differential expression experiment to which I'm trying to apply Voom transformation using limma package.

I have the experimental design, the count matrix and dge object prepared. I'm having trouble choosing the method to filter low counts reads.

The first method I am employing is filterByExpr from edgeR package:

keep <- filterByExpr(dge, design = design)
dge <- dge[keep, , keep.lib.sizes = F]
dim(dge)

After calculating normalization factors using calcNormFactors and performing voom with v <- voom(dge, design, plot = T, normalize.method = "quantile") I got this plot:

https://i.ibb.co/n0wb8Gc/voom-filterby.png

Which from what I'm reading it still needs some filtering to do given the trend of the variance.

The alternative method I used consisted on applying:

cutoff <- 1
drop <- which(apply(cpm(dge), 1, max) < cutoff)
d <- dge[-drop,] 
dim(d)

But while the number of genes trimmed is different, the plot is mostly the same.

How should I choose a threshold to filter low counts? Is there another way?

Thank you very much,

Kind regards

rna-seq r limma voom

1 answer

I don't see any reason why the recommended method of filterByExpr would not be sufficient fo you. However you might like to try the newer function edgeR::voomLmFit, which is a replacment for voom and lmFit. It is very robust to small counts and hence very insensitive to the amount of filtering done.

Log in to answer this question.