Siga el sitio web oficial de Seurat para aprender el transcriptoma espacial (conjunto de datos Slide-seq como ejemplo)

Versión secuencial de diapositivas

conjunto de datos

Aquí analizamos un conjunto de datos generado con Slide-seq v2 del hipocampo del ratón. Este tutorial seguirá gran parte de la misma estructura que Spatial Vignette para datos de Visium 10x, pero está diseñado para proporcionar una demostración específica de los datos de Slide-seq.

Puede utilizar nuestro paquete SeuratData para acceder fácilmente a los datos como se muestra a continuación. Después de instalar el conjunto de datos, puede escribir ?ssHippo para ver los comandos utilizados para crear objetos Seurat.

InstallData("ssHippo")
slide.seq <- LoadData("ssHippo")

Preprocesamiento de datos

Los pasos iniciales de preprocesamiento de los datos de expresión génica en perlas son similares a otros análisis espaciales de Seurat y experimentos típicos de scRNA-seq. Aquí, notamos que muchas perlas tenían recuentos de UMI excepcionalmente bajos, pero elegimos mantener todas las perlas detectadas para análisis posteriores.

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)

Insertar descripción de la imagen aquí
Luego utilizamos sctransform para normalizar los datos y realizar flujos de trabajo de agrupación y reducción de dimensionalidad de scRNA-seq estándar.

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)

DimPlot()Luego podemos visualizar los resultados de la agrupación en el espacio UMAP (con) o en el espacio de coordenadas de cuentas usando SpatialDimPlot().

plot1 <- DimPlot(slide.seq, reduction = "umap", label = TRUE)
plot2 <- SpatialDimPlot(slide.seq, stroke = 0)
plot1 + plot2

Insertar descripción de la imagen aquí

SpatialDimPlot(slide.seq, cells.highlight = CellsByIdentities(object = slide.seq, idents = c(1,
    6, 13)), facet.highlight = TRUE)

Insertar descripción de la imagen aquí

Integración con referencia scRNA-seq.

Para facilitar la anotación del tipo de célula de los conjuntos de datos de Slide-seq, estamos aprovechando los conjuntos de datos de hipocampo de RNA-seq unicelulares de ratón existentes producidos por Saunders*, Macosko* et al. 2018. Los datos se pueden descargar como objetos Seurat procesados ​​y las matrices de recuento sin procesar están disponibles en el sitio web de DropViz.

ref <- readRDS("../data/mouse_hippocampus_reference.rds")
ref <- UpdateSeuratObject(ref)

Las anotaciones originales del artículo se proporcionan en los metadatos de la celda del objeto Seurat. Estas anotaciones se proporcionan en varias "resoluciones", desde clases amplias ( ref class ) hasta tipos de celda ( ref class ) y tipos de celda ( refclase ) a un subgrupo dentro de un tipo de celda ( ref subgrupo ). Para los propósitos de esta viñeta, haremos una modificación en la anotación del tipo de celda ( ref$celltype ), que creemos que logra un buen equilibrio.

Primero ejecutaremos el método de transferencia de etiquetas de Seurat para predecir el tipo de célula predominante para cada cuenta.

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

Luego podemos visualizar las puntuaciones de predicción para algunas de las principales categorías esperadas.

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))

Insertar descripción de la imagen aquí

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)

Insertar descripción de la imagen aquí

Identificación de características espacialmente variables.

Como se menciona en la viñeta de Visium, podemos identificar características espacialmente variables de dos maneras generales: pruebas de expresión diferencial entre regiones anatómicas previamente anotadas o estadísticas que miden la dependencia de las características en la ubicación espacial.

FindSpatiallyVariableFeatures() Aquí demostramos esto último proporcionando una implementación del método I de Moran = 'moransi'. El I de Moran calcula la autocorrelación espacial general y proporciona una estadística (similar al coeficiente de correlación) que mide la dependencia de las características de la ubicación espacial. Esto nos permite clasificar las características según cómo varía espacialmente su representación. Para facilitar una estimación rápida de esta estadística, implementamos una estrategia de agrupación básica que dibuja una cuadrícula rectangular en un disco Slide-seq y promedia las características y posiciones dentro de cada agrupación. El número de contenedores en las direcciones xey está controlado por los parámetros x.cuts e y.cuts, respectivamente. Además, aunque no es necesario, instalar el paquete Rfast2 opcional (install.packages('Rfast2')) reducirá significativamente el tiempo de ejecución a través de una implementación más eficiente.

DefaultAssay(slide.seq) <- "SCT"
slide.seq <- FindSpatiallyVariableFeatures(slide.seq, assay = "SCT", slot = "scale.data", features = VariableFeatures(slide.seq)[1:1000],
    selection.method = "moransi", x.cuts = 100, y.cuts = 100)

Ahora visualizamos la expresión de las primeras 6 características identificadas por el I de Moran.

SpatialFeaturePlot(slide.seq, features = head(SpatiallyVariableFeatures(slide.seq, selection.method = "moransi"),
    6), ncol = 3, alpha = c(0.1, 1), max.cutoff = "q95")
SpatialFeaturePlot(slide.seq, features = head(SpatiallyVariableFeatures(slide.seq, selection.method = "moransi"),
    6), ncol = 3, alpha = c(0.1, 1), max.cutoff = "q95")

Insertar descripción de la imagen aquí

Deconvolución espacial usando RCTD

Si bien FindTransferAnchors se puede utilizar para integrar datos a nivel de puntos de conjuntos de datos transcriptómicos espaciales, Seurat v5 también incluye soporte para una descomposición robusta del tipo de célula, un método para desconvolucionar datos a nivel de puntos de conjuntos de datos espaciales al proporcionar referencias de scRNA-seq. Se ha demostrado que RCTD anota con precisión datos espaciales de una variedad de tecnologías, incluidas SLIDE-seq, Visium y la plataforma espacial in situ 10x Xenium.

Para ejecutar RCTD, primero instalamos spacexr desde el paquete de GitHub que implementa RCTD.

devtools::install_github("dmcable/spacexr", build_vignettes = FALSE)

Extraiga información de recuento, agrupación y puntos de consultas de Seurat y objetos de referencia para construir objetos ReferenceRCT utilizados por DSpatialRNA para anotaciones.

library(spacexr)

# set up reference
ref <- readRDS("../data/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))

Usando el objeto de referencia y consulta, anotamos el conjunto de datos y agregamos etiquetas de tipo de celda al objeto de consulta Seurat. RCTD se paraleliza bien, por lo que se pueden especificar varios núcleos para un rendimiento más rápido.

RCTD <- create.RCTD(query, reference, max_cores = 8)
RCTD <- run.RCTD(RCTD, doublet_mode = "doublet")
slide.seq <- AddMetaData(slide.seq, metadata = RCTD@results$results_df)

A continuación, dibuje las anotaciones del RCTD. Debido a que estamos ejecutando RCTD en modo doblete, el algoritmo asigna una suma de primer tipo a cada código de barras o punto. segundo_tipo

p1 <- SpatialDimPlot(slide.seq, group.by = "first_type")
p2 <- SpatialDimPlot(slide.seq, group.by = "second_type")
p1 | p2

Insertar descripción de la imagen aquí
mantener

write.csv(x = t(as.data.frame(all_times)), file = "../output/timings/spatial_vignette_times.csv")

Supongo que te gusta

Origin blog.csdn.net/coffeeii/article/details/130974462
Recomendado
Clasificación