[Question] DESeq2: How to set up contrasts comparing "enrichment" (pulldown vs input) across conditions?

Question

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:

  1. Still accounting for input normalization within each condition

  2. 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:**

  1. Is this the correct way to set up this type of "differential enrichment" contrast?

  2. Would an interaction model (`~ input_vs_pulldown * bait * treatment`) give equivalent results, or is there a reason to prefer one approach?

  3. Good learning resources for more complex designs.

Thanks!

Posted Dec 30, 2025, 9:00 PM UTC

23
Loading comments…