Dear community,
I am working with DESeq2 for RNA sequencing analysis. I recently discovered a large disparity between the DGE results and the results after shrinkage procedures. This only appears, if I apply a filter for LFC and adjusted P values. I imagine a difference in the algorithm since I filtered the shrunken results manually?
I am grateful for any explanations and an advice regarding which results I should use for my downstream analysis.
res_padj0.05_LFC_0.5 <- results(dds2, alpha = 0.05, lfcThreshold = 0.5,
contrast = c("disease", "Ulcerative colitis",
"non-IBD"))
out of 17808 with nonzero total read count
adjusted p-value < 0.05
LFC > 0.50 (up) : 1, 0.0056%
LFC < -0.50 (down) : 2, 0.011%
outliers [1] : 0, 0%
low counts [2] : 5, 0.028%
(mean count < 0)
[1] see 'cooksCutoff' argument of ?results
[2] see 'independentFiltering' argument of ?results
res_shrink <- lfcShrink(dds2,
contrast = c("disease", "Ulcerative colitis",
"non-IBD"),
type = "normal")
LFC_threshold <- 0.5
padj_threshold <- 0.05
res_shrink_LFC0.5_padj0.05 <- res_shrink[which(res_shrink$padj
<= padj_threshold
& abs(res_shrink$log2FoldChange)
>= LFC_threshold),]
res_sign <- res_shrink_LFC0.5_padj0.05
summary(res_sign)
out of 319 with nonzero total read count
adjusted p-value < 0.1
LFC > 0 (up) : 141, 44%
LFC < 0 (down) : 178, 56%
outliers [1] : 0, 0%
low counts [2] : 0, 0%
(mean count < 2)
[1] see 'cooksCutoff' argument of ?results
[2] see 'independentFiltering' argument of ?results
Also note that your
alpha
values for each method are different.Altough it looks like they are different in the resulting code, they should be the same. You are probably referring to the "adjusted p-value < 0.1" in the last section. But I pre filtered the results with the threshold "padj_threshold <- 0.05" which I thought was somehow equal to the approach above.
No, he refers to
alpha
which has a default of 0.1. Since you're not giving an alpha inlfcShrink
the internalresults
call uses 0.1 whereas in the first call you use 0.05. Not a big difference tough. The critical part is, as noted by others, that your first test is much more stringent, maybe too stringent if you don't have sufficient power. Note also thatnormal
shrinkage is nolonger recommended by the developers, see DESeq2 vignette.