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?
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 thedeseq()
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$