Hello everyone, I'm working on a bulk RNA-seq data...
# rnaseq
k
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
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
Totally agree. Thank you so much
t
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.
➕ 1