Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/satijalab/seurat-wrappers/llms.txt

Use this file to discover all available pages before exploring further.

Conos (Clustering On Network Of Samples) builds a joint graph across multiple single-cell datasets by finding and weighting mutual nearest neighbors in a shared embedding space. SeuratWrappers provides an as.Seurat() conversion method for Conos objects, allowing you to bring integrated results back into the Seurat ecosystem for downstream analysis.

Citation

If you use Conos in your work, please cite:
Joint analysis of heterogeneous single-cell RNA-seq dataset collections Nikolas Barkas, Viktor Petukhov, Daria Nikolaeva, Yaroslav Lozinsky, Samuel Demharter, Konstantin Khodosevich, Peter V. Kharchenko Nature Methods, 2019 doi: 10.1038/s41592-019-0466-z GitHub: https://github.com/hms-dbmi/conos

Installation

# Install Conos from GitHub
remotes::install_github('hms-dbmi/conos')

# Install SeuratWrappers for the as.Seurat conversion method
remotes::install_github('satijalab/seurat-wrappers')

Workflow

1

Load libraries and data

library(conos)
library(Seurat)
library(SeuratData)
library(SeuratWrappers)

InstallData("pbmcsca")
data("pbmcsca")
2

Preprocess each dataset independently

Split the merged Seurat object and run standard preprocessing on each subset separately. Conos works on a list of preprocessed Seurat objects.
pbmcsca.panel <- SplitObject(pbmcsca, split.by = "Method")
for (i in 1:length(pbmcsca.panel)) {
  pbmcsca.panel[[i]] <- NormalizeData(pbmcsca.panel[[i]]) %>%
    FindVariableFeatures() %>%
    ScaleData() %>%
    RunPCA(verbose = FALSE)
}
3

Build a Conos object

Pass the list of preprocessed Seurat objects to Conos$new().
pbmcsca.con <- Conos$new(pbmcsca.panel)
4

Build the joint graph

Connect datasets by finding mutual nearest neighbors in PCA space.
pbmcsca.con$buildGraph(
  k = 15,
  k.self = 5,
  space = "PCA",
  ncomps = 30,
  n.odgenes = 2000,
  matching.method = "mNN",
  metric = "angular",
  score.component.variance = TRUE,
  verbose = TRUE
)
5

Find communities and embed

Run community detection and compute a joint graph embedding.
pbmcsca.con$findCommunities()
pbmcsca.con$embedGraph()
6

Convert to Seurat and visualize

Use the SeuratWrappers as.Seurat() method to convert the Conos object back to a Seurat object. The joint embedding is stored as the largeVis reduction.
pbmcsca <- as.Seurat(pbmcsca.con)
DimPlot(pbmcsca, reduction = "largeVis",
        group.by = c("Method", "ident", "CellType"), ncol = 3)

Examples

Interferon-stimulated and control PBMC

InstallData("ifnb")
data("ifnb")
ifnb.panel <- SplitObject(ifnb, split.by = "stim")
for (i in 1:length(ifnb.panel)) {
  ifnb.panel[[i]] <- NormalizeData(ifnb.panel[[i]]) %>%
    FindVariableFeatures() %>%
    ScaleData() %>%
    RunPCA(verbose = FALSE)
}
ifnb.con <- Conos$new(ifnb.panel)
ifnb.con$buildGraph(
  k = 15, k.self = 5, space = "PCA", ncomps = 30,
  n.odgenes = 2000, matching.method = "mNN",
  metric = "angular", score.component.variance = TRUE, verbose = TRUE
)
ifnb.con$findCommunities()
ifnb.con$embedGraph()
ifnb <- as.Seurat(ifnb.con)
DimPlot(ifnb, reduction = "largeVis",
        group.by = c("stim", "ident", "seurat_annotations"), ncol = 3)

Eight human pancreatic islet datasets

InstallData("panc8")
data("panc8")
panc8.panel <- SplitObject(panc8, split.by = "replicate")
for (i in 1:length(panc8.panel)) {
  panc8.panel[[i]] <- NormalizeData(panc8.panel[[i]]) %>%
    FindVariableFeatures() %>%
    ScaleData() %>%
    RunPCA(verbose = FALSE)
}
panc8.con <- Conos$new(panc8.panel)
panc8.con$buildGraph(
  k = 15, k.self = 5, space = "PCA", ncomps = 30,
  n.odgenes = 2000, matching.method = "mNN",
  metric = "angular", score.component.variance = TRUE, verbose = TRUE
)
panc8.con$findCommunities()
panc8.con$embedGraph()
panc8 <- as.Seurat(panc8.con)
DimPlot(panc8, reduction = "largeVis",
        group.by = c("replicate", "ident", "celltype"), ncol = 3)

SeuratWrappers Function: as.Seurat.Conos

SeuratWrappers registers an as.Seurat() S3 method for Conos objects. When called on a Conos object after embedGraph(), it:
  • Combines all cells from all input datasets into a single Seurat object
  • Transfers cell metadata (sample labels, community assignments) into the Seurat object
  • Stores the Conos joint embedding (e.g., largeVis or UMAP) as a DimReduc object
  • Propagates community cluster identities to Idents()
# After building and embedding the Conos graph:
seurat.obj <- as.Seurat(conos.obj)
The reduction name in the converted Seurat object depends on which embedding method was used in embedGraph(). The default is largeVis. If you used UMAP embedding, it will appear as UMAP.

Build docs developers (and LLMs) love