Should one be especially conscious of removing low counts, when applying batch correction?

When (as a mistake) I did not remove low counts at all (beside those that equal zero for all samples), I got the following ma plot (using Glimma) :

On the right you see the individual counts. The gene that is displayed is signficant. However, the reality seems that the gene is not expressed both in treatment and in control. The batch I have corrected for made it a significantly DE however.

The batch correction algorithm of DESeq2 doesn't care whether the counts of the gene are almost all zeroes, and does not take this as a special case. In reality, it seems to me that it is a special case - if it is questionable whether the gene is expressed in the first place, it makes no sense to apply batch correction to zero counts.

The solution to this seems to be to make sure to remove low counts when applying batch correction. Usually it's only a recommendation; but when applying batch, it seems a necessity.

Would you agree?

I even wonder if one should remove counts that are low per-condition. Suppose that a gene is not expressed in treatment (and only in treatment), does it really make sense to apply batch correction to this gene?

• Usually removing genes that are not expressed in atleast n samples might help. E.g If you have 3 replicates per condition, keeping genes that are expressed in atleast 2 samples of one of the conditions. Sep 30 '20 at 17:41
• DESeq2 doesn't have any built-in way to remove batch effects. Did you use limma::removeBatchEffect to do that, or are you referring to modelling the batch effect in the design formula, e.q. ~batch+condition? The only reason to filter genes before running DESeq2 is to speed up the process. The package already performs independant filtering when you run the deseq() function unless you explicitly turn that off. Can you share your data/pipeline here? This gene should not show up with that much of a fold change, so there is something else going on. Oct 31 '20 at 7:50