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) :

enter image description here

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?

  • 1
    $\begingroup$ 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. $\endgroup$
    – geek_y
    Sep 30, 2020 at 17:41
  • 1
    $\begingroup$ 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. $\endgroup$ Oct 31, 2020 at 7:50

1 Answer 1


I don't think this has anything to do with batch correction.

The averages of that gene are distinctly different between groups, so it's correct that the gene is statistically significant. But with one sample driving all the difference, it's likely to be an artifact, or otherwise not fruitful to follow up on.

As geek_y suggested, a filter like "omit genes unless 2 samples have > 10 counts" would drop that gene.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.