the variation between treatments is less than the variation between replicates in RNA-seq data I have a set of RNA-seq samples from targeting different proteins in a complex with siRNAs. However, the PCA plot shows that the distance between the two replicates of each treatment is more than the distance between the treatments. So, there is no clear border between treatments to cluster them separately.
If I go through my usual RNA-seq data analysis pipeline using EdgeR normalization and Limma/Voom DEG analysis, I get a lot of DEGs. However, when I try to visualize them using a heatmap, the replicates do not cluster together, as expected.
What should I do in this situation? I mean should I trust the DEGs, or try to still extract co-expressed gene modules from this data?
my code for normalization:
myDGEList &lt;- DGEList(Txi_gene$counts)
log2.cpm &lt;- cpm(myDGEList, log=TRUE)

cpm &lt;- cpm(myDGEList)

# prepare your grouping matrix
group &lt;- factor(targets$group)
design &lt;- model.matrix(~group)

# filtering
keepers &lt;- filterByExpr(cpm, design)
myDGEList.filtered &lt;- myDGEList[keepers,]
log2.cpm.filtered &lt;- cpm(myDGEList.filtered, log=TRUE)

myDGEList.filtered.norm &lt;- calcNormFactors(myDGEList.filtered, method = &quot;TMM&quot;)
log2.cpm.filtered.norm &lt;- cpm(myDGEList.filtered.norm, log=TRUE)

my code for PCA plot:
pca.res &lt;- prcomp(t(log2.cpm.filtered.norm), scale.=F, retx=T)
pc.var &lt;- pca.res$sdev^2
pc.per &lt;- round(pc.var/sum(pc.var)*100, 1) 
pca.res.df &lt;- as_tibble(pca.res$x)

# PC1 vs PC2
pca.plot &lt;- ggplot(pca.res.df) +
  aes(x=PC1, y=PC2, label=sampleLabels, color = group, shape = batch) +
  geom_point(size=4) +
  xlab(paste0(&quot;PC1 (&quot;,pc.per[1],&quot;%&quot;,&quot;)&quot;)) + 
  ylab(paste0(&quot;PC2 (&quot;,pc.per[2],&quot;%&quot;,&quot;)&quot;)) +
  labs(title=&quot;PCA plot&quot;,
       caption=paste0(&quot;produced on &quot;, Sys.time())) +
  coord_fixed() +
  theme_bw()

ggplotly(pca.plot)

the PCA plot figure. The legend is cropped out for privacy reasons. Colors represent replicates. Shapes represent batch effect which was has been fixed using combat_seq on raw-data.
If you got DEGs with statistically significant p-values after multiple testing following a valid pipeline, I'd believe that, even if looking at the first few PCs doesn't look promising.