Hello everyone, I'm working on a bulk RNA-seq dataset and would appreciate advice.
Experiment:
~70 drugs at 3 concentrations (2x, 4x, 8x IC50) + DMSO controls
Spread across 7 plates, each drug appears on exactly 1 plate
Each plate has a different developmental time range
Goal: cluster drugs by Mechanism of Action (MoA)
Problem:
Drug and plate are completely confounded (Fisher's exact test p<0.001)
Developmental time varies across plates, so plate effect ≈ time effect
DMSO controls are on every plate but also vary by time
15 drugs have known MoA for validation
each drug appears on exactly 1 plate
What I've tried (nothing works cleanly):
ComBat / ComBat-seq batch correction
RUVs using DMSO as negative controls
limma DE within plate (drug vs DMSO same plate) → logFC matrix → consensus clustering → clusters by plate
edgeR with time as covariate
DEG count-based features (up/down ratio) → plate-independent but no MoA signal
ssGSEA pathway fingerprints
Question:
Is there a method or framework designed for this kind of completely confounded batch-treatment design? Or is this fundamentally unresolvable without re-plating drugs across multiple plates?
j
Jonathan Manning
04/13/2026, 8:20 AM
Sorry, I think you're asking the impossible there. If variables are entirely conflated no amount of fancy algorithms are going to untangle them for you.
You can still do what you can within-plate, for example you could compare dose response trajectories between drugs (if not absolute values).
You could maybe do additional experiments to characterise between-plate variability, e.g. if it's really low you might be able to make an assertion that you can ignore the effect, but it would all be quite risky and it would probably be more economic in time, money and science to just repeat everything with a better design.
k
Kotchanipa Rukruam
04/14/2026, 3:07 AM
Totally agree. Thank you so much
t
Thomas Danhorn
04/18/2026, 6:56 AM
I agree. Also, if you have batches you can correct for, you should put them as covariates into the model (of edgeR, limma, DESeq2, or whatever) -- batch correction should only be used when that is not an option, e.g. to clean up heatmaps, etc.