首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >🤩 Seurat | 空间转录组数据分析的标准流程!~(三)(Slide-seq数据实例)

🤩 Seurat | 空间转录组数据分析的标准流程!~(三)(Slide-seq数据实例)

作者头像
生信漫卷
发布2025-11-13 18:25:53
发布2025-11-13 18:25:53
1900
举报

写在前面

今天是如何在Seurat中处理Slide-seq数据。😎

用到的包

代码语言:javascript
复制
rm(list = ls())
library(SeuratObject)
library(Seurat)
library(SeuratData)
library(ggplot2)
library(patchwork)
library(dplyr)

示例数据

今天用到的是小鼠海马体的Slide-seq v2生成的数据集。🙂

在这里,我们读入并执行和之前相似的预处理。😘

代码语言:javascript
复制
#InstallData("ssHippo")
slide.seq <- LoadData("ssHippo")

数据预处理

代码语言:javascript
复制
plot1 <- VlnPlot(slide.seq, features = "nCount_Spatial", pt.size = 0, log = TRUE) + NoLegend()
slide.seq$log_nCount_Spatial <- log(slide.seq$nCount_Spatial)
plot2 <- SpatialFeaturePlot(slide.seq, features = "log_nCount_Spatial") + theme(legend.position = "right")
wrap_plots(plot1, plot2)

然后我们使用sctransform对数据进行归一化,并执行标准的scRNA-seq降维和聚类。😛

代码语言:javascript
复制
library(future)
options(future.globals.maxSize = 8 * 1024^3)  # 提到 8 GB,可按内存再调大
plan(multisession, workers = 4)

slide.seq <- SCTransform(slide.seq, assay = "Spatial", ncells = 3000, verbose = FALSE)
slide.seq <- RunPCA(slide.seq)
slide.seq <- RunUMAP(slide.seq, dims = 1:30)
slide.seq <- FindNeighbors(slide.seq, dims = 1:30)
slide.seq <- FindClusters(slide.seq, resolution = 0.3, verbose = FALSE)

可视化!~

代码语言:javascript
复制
plot1 <- DimPlot(slide.seq, reduction = "umap", label = TRUE)
plot2 <- SpatialDimPlot(slide.seq, stroke = 0)
plot1 + plot2

代码语言:javascript
复制
SpatialDimPlot(slide.seq, cells.highlight = CellsByIdentities(object = slide.seq, idents = c(1,
    6, 13)), facet.highlight = TRUE)

与scRNA-seq参考数据集整合

为了促进Slide-seq数据集的细胞类型注释,我们利用现有的小鼠单细胞RNA-seq海马体数据集。😘

代码语言:javascript
复制
ref <- readRDS("./mouse_hippocampus_reference.rds")

ref <- UpdateSeuratObject(ref)

我们首先运行Seuratlabel transfer法来预测每个bead的主要细胞类型。🧐

代码语言:javascript
复制
anchors <- FindTransferAnchors(reference = ref, query = slide.seq, normalization.method = "SCT",
    npcs = 50)
predictions.assay <- TransferData(anchorset = anchors, refdata = ref$celltype, prediction.assay = TRUE,
    weight.reduction = slide.seq[["pca"]], dims = 1:50)
slide.seq[["predictions"]] <- predictions.assay

然后,我们可以可视化一些主要预期细胞类型的预测分数。😎

代码语言:javascript
复制
DefaultAssay(slide.seq) <- "predictions"
SpatialFeaturePlot(slide.seq, features = c("Dentate Principal cells", "CA3 Principal cells", "Entorhinal cortex",
    "Endothelial tip", "Ependymal", "Oligodendrocyte"), alpha = c(0.1, 1))

代码语言:javascript
复制
slide.seq$predicted.id <- GetTransferPredictions(slide.seq)
Idents(slide.seq) <- "predicted.id"
SpatialDimPlot(slide.seq, cells.highlight = CellsByIdentities(object = slide.seq, idents = c("CA3 Principal cells",
    "Dentate Principal cells", "Endothelial tip")), facet.highlight = TRUE)

识别空间变化特征

代码语言:javascript
复制
DefaultAssay(slide.seq) <- "SCT"
slide.seq <- FindSpatiallyVariableFeatures(slide.seq, assay = "SCT", slot = "scale.data",
                                           features = VariableFeatures(slide.seq)[1:100],
                                           selection.method = "moransi", 
                                           x.cuts = 100, y.cuts = 100
                                           )

现在可视化Moran’s I法确定的前6个特征的表达。🙊

代码语言:javascript
复制
SpatialFeaturePlot(slide.seq, 
                   features = head(SpatiallyVariableFeatures(slide.seq, selection.method = "moransi"),6), 
                   ncol = 3, alpha = c(0.1, 1), max.cutoff = "q95"
                   )

使用RCTD进行空间反卷积

FindTransferAnchors可用于集成来自空间转录组数据集的点级数据。😛

此外,Seurat v5还支持 Robust Cell Type Decomposition,可以在有scRNA-seq作为参考时从空间数据集中反卷积spot数据的计算方法。🫢

RCTD可以准确注释来自各种技术的空间数据,包括SLIDE-seqVisium10x Xenium 原位空间平台。

代码语言:javascript
复制
#yulab.utils::install_zip_gh("dmcable/spacexr")
# install.packages("devtools")
#options(timeout = 600000000) ### set this to avoid timeout error
#devtools::install_github("dmcable/spacexr", build_vignettes = FALSE)

library(spacexr)

# set up reference
#ref <- readRDS("./mouse_hippocampus_reference.rds")
ref <- UpdateSeuratObject(ref)
Idents(ref) <- "celltype"

# extract information to pass to the RCTD Reference function
counts <- ref[["RNA"]]$counts
cluster <- as.factor(ref$celltype)
names(cluster) <- colnames(ref)
nUMI <- ref$nCount_RNA
names(nUMI) <- colnames(ref)
reference <- Reference(counts, cluster, nUMI)

# set up query with the RCTD function SpatialRNA
slide.seq <- SeuratData::LoadData("ssHippo")
counts <- slide.seq[["Spatial"]]$counts
coords <- GetTissueCoordinates(slide.seq)
colnames(coords) <- c("x", "y")
coords[is.na(colnames(coords))] <- NULL
query <- SpatialRNA(coords, counts, colSums(counts))

代码语言:javascript
复制
RCTD <- create.RCTD(query, reference, max_cores = 6)
RCTD <- run.RCTD(RCTD, doublet_mode = "doublet")
slide.seq <- AddMetaData(slide.seq, metadata = RCTD@results$results_df)

因为我们在doublet模式下运行RCTD,所以算法会为每个barcodespot分配一个first_typesecond_type。😏

代码语言:javascript
复制
p1 <- SpatialDimPlot(slide.seq, group.by = "first_type")
p2 <- SpatialDimPlot(slide.seq, group.by = "second_type")
p1 | p2
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信漫卷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 用到的包
  • 示例数据
  • 数据预处理
  • 与scRNA-seq参考数据集整合
  • 识别空间变化特征
  • 使用RCTD进行空间反卷积
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档