Nathan Tear
09/10/2025, 4:18 AMRyan
09/18/2025, 10:50 PMgene_id baseMean log2FoldChange lfcSE pvalue padj
ENSMUSG00000026180.10 0.9640223 -14.02183 4.95085698 2.061986e-05 0.00289795
The basemean is fairly low which made me think some of these might have low counts. Filtering on basemean alone does not seem to be a valid reason (https://support.bioconductor.org/p/9143776/#9143785)
I took a look at the all.normalised_counts.tsv:
gene_id CD1BRN CD2BRN CD3BRN CD4BRN PRORA1BRN PRORA2BRN PRORA3BRN PRORA4BRN WD1BRN WD2BRN WD3BRN WD4BRN
ENSMUSG00000026180.10 0 3.219497278 0 0 1.93365157 0 6.415119346 0 0 0 0 0
all.vst.tsv:
gene_id CD1BRN CD2BRN CD3BRN CD4BRN PRORA1BRN PRORA2BRN PRORA3BRN PRORA4BRN WD1BRN WD2BRN WD3BRN WD4BRN
ENSMUSG00000026180.10 6.37715807 6.66063142 6.37715807 6.37715807 6.59698741 6.37715807 6.77667224 6.37715807 6.37715807 6.37715807 6.37715807 6.37715807
The raw counts from salmon:
salmon.merged.gene_counts.tsv
gene_id gene_name CD1BRN CD2BRN CD3BRN CD4BRN PRORA1BRN PRORA2BRN PRORA3BRN PRORA4BRN WD1BRN WD2BRN WD3BRN WD4BRN
ENSMUSG00000026180.10 Cxcr2 0 3 0 0 2 0 6 0 0 0 0 0
and finally the gene length:
salmon.merged.gene_lengths.tsv
gene_id gene_name CD1BRN CD2BRN CD3BRN CD4BRN PRORA1BRN PRORA2BRN PRORA3BRN PRORA4BRN WD1BRN WD2BRN WD3BRN WD4BRN
ENSMUSG00000026180.10 Cxcr2 2769.29671 2760.794 2769.29671 2769.29671 2773.335 2769.29671 2769.456 2769.29671 2769.29671 2769.29671 2769.29671 2769.29671
This is a fairly low expression gene which is pretty large in size. I don't understand why it comes up as significant in DESeq2 but if you plot the normalised vst counts there is no difference between samples. How should we remove such genes from our analysis and how are you dealing with it in your datasets?
Thanks for your help in understanding this better!Kranthi Vavikolanu
09/26/2025, 1:11 PMDESeq2 R package was used for differential analysis. p-values were adjusted with the BH method to reduce the number of false positives. Genes were considered differential if, for the respective contrast, the adjusted p-value was equal to or lower than 0.1 and the absolute log2 fold change was equal to or higher than 0.”_
But looking at the plots below and the data in *deseq2.results_filtered.tsv the adjusted p-value was equal to or lower than 0.05 and the absolute log2 fold change was equal to or higher than 1.
can you help me understand if the description mentioned above refers to something else ? Thank youCarla Pereira-Garcia
10/07/2025, 8:15 AMŽiga Vičič
10/10/2025, 4:33 PMTee G
10/21/2025, 7:47 PM// Filtering options
filtering_min_samples = 5.0
filtering_min_abundance = 1.0
it reduces the volume,
Input was a matrix of 69389 genes for 36 samples, reduced to 41690 genes after filtering for low abundance.but also provides some comparison DEG results
gene_id baseMean log2FoldChange lfcSE pvalue padj
ENSSSAG00000006734 0.3893752 -11.70838 10.69647484 0.00002290416 0.02075814
with abundance in 1 sample out of 12
D1L D1L D1L D1L D1L D1L D1PAIR D1PAIR D1PAIR D1PAIR D1PAIR D1PAIR
gene_id H9_1 H9_2 H17_1 H17_2 H1_1 H1_2 H2_1 H2_2 H7_1 H7_2 H15_1 H15_2
ENSSSAG00000006734 0 0 0 0 3.548172273 0 0 0 0 0 0 0
across all 36 samples
D1H D1H D2PAIR D2PAIR D2H D2H D2L D2L D2H D2H D1PAIR D1PAIR D1H D1H D1L D1L D2L D2L D1L D1L D1PAIR D1PAIR D1H D1H D2H D2H D2L D2L D2PAIR D2PAIR D1PAIR D1PAIR D2PAIR D2PAIR D1L D1L
gene_id H10_1 H10_2 H11_1 H11_2 H12_1 H12_2 H13_1 H13_2 H14_1 H14_2 H15_1 H15_2 H16_1 H16_2 H17_1 H17_2 H18_1 H18_2 H1_1 H1_2 H2_1 H2_2 H3_1 H3_2 H4_1 H4_2 H5_1 H5_2 H6_1 H6_2 H7_1 H7_2 H8_1 H8_2 H9_1 H9_2
ENSSSAG00000006734 0 0 0 0 0 2.014868833 0 1.16021696 0 0 0 0 0 0 0 0 1.099274509 0 3.548172273 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.050406692 0 0Susanne Jodoin
10/24/2025, 2:46 PMNina Xiong
10/28/2025, 1:17 PMRscript -e 'library(methods); shiny::runApp("PATH_TO_APP_FOLDER", launch.browser = TRUE)'Megan Justice
10/30/2025, 8:55 PMMegan Justice
11/05/2025, 12:38 AMEvan Floden
11/26/2025, 9:09 AMKai Lawson-McDowall
12/03/2025, 2:10 PM--deseq2_test , but wasn't sure if this was functional? 🙂David Carlson
12/10/2025, 4:34 PMdev branch), that the p-values reported tend to fall in discrete clusters instead of being more continuously spread. For example, sorting from smallest to largest, the p-values I'm seeing are a series of the following:
0
1.00E-04
2.00E-04
3.00E-04
4.00E-04
5.00E-04
6.00E-04
7.00E-04
etc.
Dozens or hundreds of genes have these same p-values, and there are no values in between these groups of numbers. In prior runs of the pipeline, p-values were more continuously spread (e.g., I might have values between 0 and 1.00E-04 or between 1.00E-04 and 2.00E-04).
Is this difference due to some change in the way that the pipeline (or DESeq2) is rounding the p-values, or is this a peculiarity of my specific data set?Kai Lawson-McDowall
01/27/2026, 5:14 PM## grp ind cnd ind.n
## 1 X 1 A 1
## 2 X 1 B 1
## 3 X 2 A 2
## 4 X 2 B 2
## 5 X 3 A 3
## 6 X 3 B 3
## 7 Y 4 A 1
## 8 Y 4 B 1
## 9 Y 5 A 2
## 10 Y 5 B 2
## 11 Y 6 A 3
## 12 Y 6 B 3
From the documentation, this suggests the model can be:
counts ~ grp + grp:ind.n + grp:cnd
However, I'm failing to see how we can translate interaction terms into the samplesheet and contrasts?
The closest that I can think of/manage is that we can instead have a column grp_ind
that acts to combine the `grp`and ind columns (as they are linearly related)
## grp ind cnd individual_and_group
## 1 X 1 A X_1
## 2 X 1 B X_1
## 3 X 2 A X_2
## 4 X 2 B X_2
## 5 X 3 A X_3
## 6 X 3 B X_3
## 7 Y 4 A Y_4
## 8 Y 4 B Y_4
## 9 Y 5 A Y_5
## 10 Y 5 B Y_5
## 11 Y 6 A Y_6
## 12 Y 6 B Y_6
As far as I can tell, with the pipeline, we can only model A vs B within each group (X and Y) accounting for patient, and then have to do I have to the group-specific condition effects outside the pipeline?
My contrasts file would therefore, from what I can tell, look like:
id,variable,reference,target,blocking,exclude_samples_col,exclude_samples_values
X_cnd_B_vs_A,cnd,A,B,ind_grp,grp,Y
Y_cnd_B_vs_A,cnd,A,B,ind_grp,grp,X
where the first row is looking at A vs B only in group X, accounting for patient ID. and the second row is the same except for group Y?
Hopefully what I've laid out above makes sense and I hope I haven't made an incredibly obvious blunder, thanks in advance 🙂Victor
01/30/2026, 10:26 AMJuliana Assis
02/09/2026, 1:51 PMdeseq2_min_replicates_for_replace
'minReplicatesForReplace' parameter passed to DESeq()
Type expected for this parameter's value (null) is different from the one defined in the pipeline schema. Must be a number.
the minimum number of replicates required in order to use replaceOutliers on a sample. If there are samples with so many replicates, the model will be refit after these replacing outliers, flagged by Cook's distance. Set to Inf in order to never replace outliers. It set to Inf for fitType="glmGamPoi".
So, I'm inventing a number here to avoid it:
--deseq2_min_replicates_for_replace 1000000
Is it ok to do? Why I can't pass minRep Inf? And null does not mean the same.Kai Lawson-McDowall
02/27/2026, 2:27 PMThis gives full control over the contrast definition but requires understanding of the model matrix. Some downstream applications (e.g. GSEA_GSEA, SHINYNGS_APP) do not support formula-based contrasts as they require a meta.variable.
I'm just wanting to confirm this will also be the case for 2.0? And that we may have to custom post-hoc GSEA for formula based designs (or design our own modules? 🙂)
Thanks in advance!Uri David Akavia
03/03/2026, 1:10 PMapply(data.frame(comp.results), 2, function(x) sprintf(paste0("%." opt\$round_digits, "g"), x))
This will print everything below significant digits in E format, but still keep a fixed amount of significant digits.
I can open an issue, but this will need to be fixed on multiple modules. Would you like me to do that? Maybe this isn't a problem, and should stay the way it is?
Should I open an issue on differentialabundane, and then have sub-issues for each module with a PR?Ben Fixman
03/22/2026, 10:37 PMFlorian Wuennemann
06/19/2026, 7:08 PMtest_full of differentialabundance seems to be broken due to a non existing file from the test-datasets repo:
https://raw.githubusercontent.com/nf-core/test-datasets/differentialabundance/testdata/rnaseq_featurecounts_merged_gene_counts.txt
ERROR ~ No such file or directory: <https://raw.githubusercontent.com/nf-core/test-datasets/differentialabundance/testdata/rnaseq_featurecounts_merged_gene_counts.txt>
On dev, the gene_counts parameter points to the right file: https://raw.githubusercontent.com/nf-core/test-datasets/differentialabundance/testdata/rnaseq_featurecounts_merged_gene_counts.tsvAlex Peltzer
06/22/2026, 8:25 AMLorenzo Scalzini
07/02/2026, 4:56 PMgene_sets_files (comma-separated): the GSEA_GSEA task fails with exit code 1 during post-processingLorenzo Scalzini
07/02/2026, 4:57 PMJennifer Müller
08/19/2026, 1:01 PMNikolai Hecker
08/31/2026, 3:12 PMmodules/local ?Yann Vanrobaeys
09/02/2026, 5:43 PMyokofakun
09/21/2026, 8:54 AMNFCORE_DIFFERENTIALABUNDANCE:DIFFERENTIALABUNDANCE:QUARTONOTEBOOK
(...)
12. │ └─base::withCallingHandlers(...)
13. ├─purrr:::call_with_cleanup(...)
14. └─.f(.x[[i]], ...)
15. └─global generate_boxplots(combined, label_col)
16. └─purrr::walk(...)
17. └─purrr::map(.x, .f, ..., .progress = .progress)
18. └─purrr:::map_("list", .x, .f, ..., .progress = .progress)
19. ├─purrr:::with_indexed_errors(...)
20. │ └─base::withCallingHandlers(...)
21. ├─purrr:::call_with_cleanup(...)
22. └─.f(.x[[i]], ...)
23. ├─plotly::layout(...)
24. ├─plotly::ggplotly(p_box, tooltip = c("x", "y", "color", "text"))
25. └─plotly:::ggplotly.ggplot(...)
26. └─plotly::gg2list(...)
27. └─plotly (local) ggplotly_build(p)
28. └─base::lapply(data, scales_map_df, scales = npscales)
29. └─plotly (local) FUN(X[[i]], ...)
30. └─scales$map_df(df)
31. └─ggplot2 (local) map_df(..., self = self)
32. ├─base::unlist(...)
33. └─base::lapply(self$scales, function(scale) scale$map_df(df = df))
34. └─ggplot2 (local) FUN(X[[i]], ...)
35. └─scale$map_df(df = df)
36. └─ggplot2 (local) map_df(..., self = self)
37. └─base::lapply(aesthetics, function(j) self$map(df[[j]]))
38. └─ggplot2 (local) FUN(X[[i]], ...)
39. └─self$map(df[[j]])
40. └─ggplot2 (local) map(..., self = self)
41. └─self$palette(n)
42. └─ggplot2 (local) palette(...)
43. └─ggplot2 (local) palette(...)
44. └─ggplot2 (local) palette(...)
45. └─cli::cli_abort("Insufficient values in manual scale. {n} needed but only {length(values)} provided.")
46. └─rlang::abort(...)
nf-core/differentialabundance 2.0.0.
my input was:
/nextflow run nf-core/differentialabundance \
-c nfcore.cfg \
-profile apptainer \
-resume \
--outdir "results" \
--input "samplesheet.csv \
--contrasts contrasts.csv \
--matrix featureCount.tsv \
--features_metadata_cols "gene_id,gene_name" \
--features_id_col gene_id \
--features_name_col "gene_name"
PierreChristian Woehle
09/28/2026, 10:45 AMChristian Woehle
10/01/2026, 2:49 PMThomas Weber
10/13/2026, 9:23 PM