Seurat: Workflow for Reciprocal PCA integration with SCTransform normalization

Created on 14 Oct 2020  路  6Comments  路  Source: satijalab/seurat

Hello,

I am trying to integrate ~20 scRNA-seq samples and want to use the rpca approach after normalizing each sample with SCTransform. However, this isn't explicitly demonstrated in the vignette for rpca, and I have a couple of questions:

  1. When running Integrate_Data() after FindIntegrationAnchors(), should I specify normalization.method = "SCT"?
  2. Do I need to replace the ScaleData() step with SCTransform()? Do I omit it altogether? Or do I keep it even though the individual samples were normalized with SCTransform?

Here is an example of how I am thinking of doing it, using the data from the Seurat rpca vignette:

bm40k.list <- lapply(X = bm40k.list, FUN = function(x) {
    x <- SCTransform(x)
})

features.list <- SelectIntegrationFeatures(object.list = bm40k.list)

bm40k.list <- lapply(X = bm40k.list, FUN = function(x) {
    x <- PCA(x, features = features)
}

anchors <- FindIntegrationAnchors(object.list = bm40k.list, reference = c(1, 2), reduction = "rpca", 
    dims = 1:30)
bm40k.integrated <- IntegrateData(anchorset = anchors, dims = 1:30, normalization.method = "SCT")

bm40k.integrated <- RunPCA(bm40k.integrated, verbose = FALSE)
bm40k.integrated <- RunUMAP(bm40k.integrated, dims = 1:30)

However, I'm not sure if this is the right way to use rpca with SCT. Could someone please clarify what the proper approach is?

Thanks!

Most helpful comment

Hi @zrcjessica ,

I remember having the same error. I had to provide the features calculated in the SelectIntegrationFeatures as anchor.features in the FindIntegrationAnchors step. So, the command I used is as follows -

anchors <- FindIntegrationAnchors(object.list = seurat.list,
                                  reference=c(1,2,3,4),
                                  normalization.method="SCT",
                                  anchor.features=integration.features,
                                  verbose=T,
                                  reduction="rpca")

Cheers,
Somesh

All 6 comments

Hi @zrcjessica ,

I, too, recently, performed the same integration workflow for 16 samples using SCT normalization with Reciprocal PCA integration

I followed the exact same steps as you, and in general, this seems like a proper approach to do so. To specifically answer your points,

  1. I think you should mention normalization.method = SCT in the FindIntegrationAnchors() step as well along while doing so in IntegrateData()

  2. I do not think it is recommended to redo SCTransform() after integration

I would be happy to get this confirmed by someone else as well.

Cheers,
Somesh

I've found that when I run FindIntegrationAnchors() with normalization.method="SCT" in the code above, I get the following error:

Error in FindIntegrationAnchors(object.list = samples.list, reference = 5, : Please specify the anchor.features to be used. The expected workflow for integratinge assays produced by SCTransform is SelectIntegrationFeatures -> PrepSCTIntegration -> FindIntegrationAnchors.

1. FindIntegrationAnchors(object.list = samples.list, reference = 5, 
 .     normalization.method = "SCT", reduction = "rpca", dims = 1:30)
2. stop("Please specify the anchor.features to be used. The expected ", 
 .     "workflow for integratinge assays produced by SCTransform is ", 
 .     "SelectIntegrationFeatures -> PrepSCTIntegration -> ", "FindIntegrationAnchors.")

Hi @zrcjessica ,

I remember having the same error. I had to provide the features calculated in the SelectIntegrationFeatures as anchor.features in the FindIntegrationAnchors step. So, the command I used is as follows -

anchors <- FindIntegrationAnchors(object.list = seurat.list,
                                  reference=c(1,2,3,4),
                                  normalization.method="SCT",
                                  anchor.features=integration.features,
                                  verbose=T,
                                  reduction="rpca")

Cheers,
Somesh

Did you also have to run PrepSCTIntegration() prior to running FindIntegrationAnchors()?

Yes, Precisely.

The user responses are correct. You should specify normalization method in IntegrateData. There is no need to run ScaleData after SCTransform, nor should you re-run SCTransform after integration.

Was this page helpful?
0 / 5 - 0 ratings