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:

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
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.