[Question] DESeq2: How to set up contrasts comparing "enrichment" (pulldown vs input) across conditions?
Hi all,
I'm analyzing an RNA-seq experiment with a pulldown design (similar structure to RIP-seq or ChIP-seq with RNA readout). For each condition, I have both **input** and **pulldown** samples.
My experimental design:
- 2 bait types (A vs B)
- 2 treatments (control vs treated)
- Input + Pulldown for each combination
- 2 replicates per group
- 16 samples total
I'm using DESeq2 with a grouped design (`~ 0 + group`) where I have 8 groups:
`A_control_input, A_control_pulldown, A_treated_input, A_treated_pulldown, B_control_input, B_control_pulldown, B_treated_input, B_treated_pulldown`
**What I want to ask:**
I can easily get condition-specific enrichment with simple contrasts like:
```r
results(dds, contrast = c("group", "A_control_pulldown", "A_control_input"))
```
But I want to compare **overall enrichment between bait A and bait B**, while:
-
Still accounting for input normalization within each condition
-
Averaging across treatments
In other words, I want something like:
```
[Average A enrichment] - [Average B enrichment]
= [(A_treated_pd - A_treated_in) + (A_control_pd - A_control_in)] / 2
- [(B_treated_pd - B_treated_in) + (B_control_pd - B_control_in)] / 2
```
**My attempt:**
I'm using a numeric contrast vector:
```r
contrast_vec <- c(
A_control_input = -0.5,
A_control_pulldown = 0.5,
A_treated_input = -0.5,
A_treated_pulldown = 0.5,
B_control_input = 0.5,
B_control_pulldown = -0.5,
B_treated_input = 0.5,
B_treated_pulldown = -0.5
)
results(dds, contrast = contrast_vec)
```
**Questions:**
-
Is this the correct way to set up this type of "differential enrichment" contrast?
-
Would an interaction model (`~ input_vs_pulldown * bait * treatment`) give equivalent results, or is there a reason to prefer one approach?
-
Good learning resources for more complex designs.
Thanks!
Posted Dec 30, 2025, 9:00 PM UTC