The shrinkage is generally useful. [ edit: it is available via lfcShrink ] Full methods are described in the DESeq2 paper (see DESeq2 citation), but in short, it looks at the largest fold changes that are not due to low counts and uses these to inform a prior distribution. So the large fold changes from genes with lots of statistical information are not shrunk, while the imprecise fold changes are shrunk. This allows you to compare all estimated LFC across experiments, for example, which is not really feasible without the use of a prior.
One case where I would not use it, is if it is expected that nearly all genes will have no change and there is little to no variation across replicates (so near technical replication), and then say < 10 genes with very large fold changes. This scenario could occur in non-biological samples, for example technical replicates plus DE spike ins. The reason this would cause a problem is that the prior is formed according to a high percentile of the large fold changes, but it could miss if there were singular DE genes, and form a prior which is not wide enough to accommodate very large fold changes. It is trivial to turn off the prior in this case (betaPrior=FALSE).
I don't have a comment on small RNA-seq, as I haven't personally analyzed this, but I know the moderated LFC have been used in some small RNA-seq analyses.
You can plot fold changes with and without shrinkage like so:
res <- results(dds, addMLE=TRUE)
plotMA(res)
plotMA(res, MLE=TRUE)
Hi! I'm finding a little bit difficulties trying to understand the shrinkage. I am testing a multifactor design (two factors with two conditions each) and the interaction between the two factors. I have run the DESeq function and I was going to get the Shrunk data with lfcShrink, but I cannot use the type "normal" since I have an interaction. My question is: do I have to include the shrunk data in the original DESeqDataSet and rerun the DESeq function in order to test the shrunk data or has the DESeq function already shrunk it? If the DESeq function has already shrunk it, which type has it used? Thanks for your help!
I'd recommend to use type="apeglm". I'd recommend using something like the paradigm in the quick start section of the vignette, where you specify the coefficient of interest using the name or number from resultsNames(dds). You would not re-run DESeq(). The `res` object is then giving you p-values and FDR for the maximum likelihood LFC and a posterior mode and posterior SD for the LFC.
https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#quick-start
The difference between results() and lfcShrink() is that the former does not provide fold change shrinkage. The latter function calls results() internally to create the p-value and adjusted p-value columns, which provide inference on the maximum likelihood LFC. The shrunken fold changes are useful for ranking genes by effect size and for visualization.
In addition, we have new functionality providing aggregate posterior probabilities on the shrunken LFC but this hasn't been fully released yet (in the current release there isn't support for arbitrary thresholds on LFC). Full functionality with lfcThreshold will be released in April.