This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Negative Expression in RNA Assay on Dot Plot After SCT Transform

I am working on single-cell data, and I have data from mice that received 2 different therapies. I merged the mice within the 1st group together and applied quality control steps, followed by applying SCT transform. I performed the same process for mice in the 2nd group as well.

I identified variable features using SelectIntegrationFeatures. Then, I merged all the data and plotted a dot plot by selecting RNA assay. I normalized the data before using the RNA assay. The dot plot graph shows an average expression ranging from -1 to 2. Why is this the case?

ps. My goal is not to perform integration, but only to merge the data and then create dot plots for cell type annotation I used Seurat for all the processes.

scttransform scrnaseq merge normalization scaledata

2 answers

The dot plot graph shows an average expression ranging from -1 to 2. Why is this the case?

Looks like you are plotting integrated data. Integrated data can have negative values which is expected. However, it is recommended to use uncorrected data for visualization and DE. Can you show the full code you are running?

No, I did not perform integration. I used the 'SelectIntegrationFeatures' function to choose variable features. After that, I did not perform integration anchor finding, etc, I directly merged the two SCT-transformed objects using the 'Merge' function. Additionally, before creating the dot plot, I set the default assay as RNA assay.

Why would you run SelectIntegrationFeatures since you are not integrating data here? This function is to choose the features to use when integrating multiple datasets. You can simply merge your 1st and 2nd group Seurat objects, and perform standard single cell QC process.

When I apply SCT transform separately to the 2 samples and then merge them, the merged object does not contain variable features, Because of this I used SelectIntegrationFeatures function. However, I'm not sure if doing this is the right approach.

DotPlot scales the data before visualisation, did you try with scale = FALSE ?

Yes, I noticed that. When setting scale =FALSE , the average expressions become positive, but I couldn't figure out which slot the DotPlot function uses. Also, I'm not sure if the scale argument in the DotPlot function is asking for information about whether the data was scaled before or if it scales the data itself when set to true.

If you look at the function in git, the scale part is done after the dataset is subset (subset, group by, and split by) and they data.use <- scale(x = data.use) if scale = TRUE, while data.use <- log1p(x = data.use) if set to FALSE. The fact that they either scale or log norm, should indicate that they either take the counts or the data slot. For sure not the scaled.

Log in to answer this question.