Clustering

1. processing steps
library(Giotto)

path_to_matrix = system.file("extdata", "seqfish_field_expr.txt", package = 'Giotto')
path_to_locations = system.file("extdata", "seqfish_field_locs.txt", package = 'Giotto')

my_giotto_object = createGiottoObject(raw_exprs = path_to_matrix,
                                      spatial_locs = path_to_locations)

# processing
my_giotto_object <- filterGiotto(gobject = seqfish_mini, 
                             expression_threshold = 0.5, 
                             gene_det_in_min_cells = 20, 
                             min_det_genes_per_cell = 0)
my_giotto_object <- normalizeGiotto(gobject = my_giotto_object)

# dimension reduction
my_giotto_object <- calculateHVG(gobject = my_giotto_object)
my_giotto_object <- runPCA(gobject = my_giotto_object)
my_giotto_object <- runUMAP(my_giotto_object, dimensions_to_use = 1:5)

\(~\)

2. clustering algorithms

Giotto provides a number of different clustering algorithms, here we show some of the most popular.

# leiden
my_giotto_object = doLeidenCluster(my_giotto_object, name = 'leiden_clus')
plotUMAP_2D(my_giotto_object, cell_color = 'leiden_clus', point_size = 3)

# louvain
my_giotto_object = doLouvainCluster(my_giotto_object, name = 'louvain_clus')
plotUMAP_2D(my_giotto_object, cell_color = 'louvain_clus', point_size = 3)

# kmeans
my_giotto_object = doKmeans(my_giotto_object, centers = 4, name = 'kmeans_clus')
plotUMAP_2D(my_giotto_object, cell_color = 'kmeans_clus', point_size = 3)

# hierarchical
my_giotto_object = doHclust(my_giotto_object, k = 4, name = 'hier_clus')
plotUMAP_2D(my_giotto_object, cell_color = 'hier_clus', point_size = 3)

\(~\)

2. cluster similarity and merging

To finetune clustering results Giotto provides methods to calculate similarities between clusters and merge clusters based on correlation and size parameters.

# calculate cluster similarities to see how individual clusters are correlated
cluster_similarities = getClusterSimilarity(my_giotto_object,
                                            cluster_column = 'leiden_clus')

# merge similar clusters based on correlation and size parameters
mini_giotto_single_cell = mergeClusters(my_giotto_object, 
                                        cluster_column = 'leiden_clus', 
                                        min_cor_score = 0.7, 
                                        force_min_group_size = 4)

# visualize
pDataDT(my_giotto_object)
plotUMAP_2D(my_giotto_object, cell_color = 'merged_cluster', point_size = 3)

\(~\)

3. dendrogram splits

A dendrogram can be created from the clustering results. This may for example help in identifying genes that are most differentially expressed between branches.

splits = getDendrogramSplits(my_giotto_object, cluster_column = 'merged_cluster')

\(~\)

4. Subclustering

See seqfish+ clustering example.