Large difference between lfcshrink and non-shrunk DESeq2 results
1
0
Entering edit mode
Dave • 0
Last seen 4 days ago
United States

Hi All,

I've got a question related to some pretty dramatic differences I'm seeing in a DESeq2 analysis depending on whether or not I use lfcshrink on the results.

Here is what the "standard" results of my analysis look like:

res <- results(ddsTxi)

print(summary(res))

out of 28221 with nonzero total read count

LFC > 0 (up)       : 3, 0.011%
LFC < 0 (down)     : 2, 0.0071%
outliers [1]       : 206, 0.73%
low counts [2]     : 0, 0%
(mean count < 0)


In this case, there are virtually no DEGs.

However, if I use lfcshrink:

resLFCshrink <- lfcShrink(ddsTxi, coef=2, type="apeglm")

print(summary(resLFCshrink))

out of 28221 with nonzero total read count

LFC > 0 (up)       : 2987, 11%
LFC < 0 (down)     : 976, 3.5%
outliers [1]       : 206, 0.73%
low counts [2]     : 3273, 12%
(mean count < 1)


there are many DEGs!

I've never seen such a dramatic difference between the "standard" results and the lfcshrink results. The latter results are more in keeping with what I was expecting, however the difference is so big I'm worried that I shouldn't be trusting these results at all.

Assuming that this is an abnormal situation, does anyone have suggestions for steps I might take to investigate what is going on here?

Thanks! Dave

DESeq2 • 176 views
2
Entering edit mode
@mikelove
Last seen 1 day ago
United States

lfcShrink doesn't change padj in the results table, it just adds a new log2FoldChange column. lfcShrink doesn't have a method for making p-values or adjusted p-values, it just recycles them from results. You can even pass res=res to lfcShrink if you have particular arguments you like to use with results and you want those to be passed along to the final table.

It seems like it used independent filtering (default) in the second run but not in the first run.

0
Entering edit mode

Thanks, Michael. I didn't link lfcShrink actually did make its own p-values or adjusted p-values until I got confused by these results.

I don't know how I managed to turn off independent filtering in the first run (the whole analysis is all one script using the same dds object), but I will have to investigate further and figure out what went wrong. I appreciate the response!

0
Entering edit mode

After digging into the metadata, I figured out what was going wrong. I am running an analysis where the design is ~ tissue + condition, but the res and resLFCshrink objects are reporting the results of different comparisons because I set the value of coeff= to the wrong column in my samples table when running lfcShrink.

Based on this, it would appear that my tissue effect is quite a bit stronger than the experimental condition. That's a bummer, but at least I understand where I went wrong.