I am new to scRNA-seq data analysis and would appreciate some guidance on the preprocessing workflow.
I noticed that my dataset contains stress- and hypoxia-related clusters. To reduce these effects, I used sc.pp.regress_out() in ScanPy followed by sc.pp.scale(). However, this introduces negative values into the expression matrix.
During annotation, I also found evidence of cell identities beyond the expected fetal human brain cell types, so I suspect that ambient RNA contamination may be contributing to the problem. I therefore wanted to run decontX for ambient RNA removal. However, decontX requires a cluster_key, and it also expects non-negative count data, so it cannot be applied after regress_out() and scaling.
I’m therefore unsure about the correct preprocessing order.
- Should ambient RNA removal with decontX be performed before
regress_out()? - If decontX requires clusters, should I first cluster the normalized data, run decontX, and then repeat normalization, PCA, and clustering on the decontaminated counts?
My current workflow is:
- Basic QC
- Doublet detection (Scrublet)
- Normalization (Shifted log)
- Highly variable gene selection
- PCA
- Batch correction (Harmony)
- Clustering
- Ambient RNA correction (decontX)
- Correction of hypoxia and stress effects using
sc.pp.regress_out() - Data scaling
- Rerun the neighborhood graph and clustering
- Cell type annotation
I would appreciate any advice on the recommended order of these preprocessing steps.
0 answers
No answers yet.
Log in to answer this question.
Generally, ambient correction is done at the beginning of the analysis. It takes the unfiltered (that is containing empty droplets) data, and then it subtracts the ambient estimates from the raw counts. What you describe (regress etc) comes after. At least, this is how it goes when using SoupX.
In my case, I don’t have access to the unfiltered/raw matrix anymore. Because of that limitation, I was looking at decontX as an alternative since it can estimate contamination using clustered cells. That said, I agree with your point that ordering ambient RNA correction should ideally be done early in the workflow using SoupX.
Then either get the fastq files and reprocess, or bother the creator of the data to give you these preprocessed files. If you don't have either of it then it is not publishable anyway due to lack of raw data. That's important.