1. load libraries

2. Load Seurat Object


 load("AllSample_corrected_AzimuthAnnotated_L1.Robj")

 merged_seurat_filtered <- All_samples_Merged

merged_seurat_filtered
An object of class Seurat 
36724 features across 49193 samples within 5 assays 
Active assay: RNA (36601 features, 0 variable features)
 2 layers present: counts, data
 4 other assays present: ADT, prediction.score.celltype.l1, prediction.score.celltype.l2, prediction.score.celltype.l3
 2 dimensional reductions calculated: integrated_dr, ref.umap

3. Data PREPERATION


# # perform standard workflow steps to figure out if we see any batch effects --------
# merged_seurat_filtered <- NormalizeData(object = merged_seurat_filtered, verbose = FALSE)
# merged_seurat_filtered <- FindVariableFeatures(object = merged_seurat_filtered , selection.method = "vst", nfeatures = 2000,verbose = FALSE)
# 
# merged_seurat_filtered <- ScaleData(object = merged_seurat_filtered)
# 
# 
# Variable_genes <- merged_seurat_filtered@assays$RNA@var.features
# 
# Variables_genes_after_exclusion <- Variable_genes[!grepl("^HLA-|^Xist", Variable_genes)]
# 
# merged_seurat_filtered <- RunPCA(merged_seurat_filtered,
#                          features = Variables_genes_after_exclusion,
#                          do.print = TRUE,
#                          pcs.print = 1:5,
#                          genes.print = 15)

ElbowPlot(merged_seurat_filtered)



# merged_seurat_filtered <- RunUMAP(object = merged_seurat_filtered, dims = 1:20)


# plot
before <- DimPlot(merged_seurat_filtered, reduction = "umap", group.by = "cell_line", label = TRUE, label.box = TRUE, repel = TRUE)



DimPlot(merged_seurat_filtered, reduction = "umap", group.by = "cell_line", label = TRUE, label.box = TRUE, repel = TRUE)

NA
NA
NA

4. Harmony-integration


# run Harmony -----------
# merged_seurat_filtered.harmony <- merged_seurat_filtered %>%
#   RunHarmony(group.by.vars = 'orig.ident', plot_convergence = FALSE)
# 
# merged_seurat_filtered.harmony@reductions
# 
# merged_seurat_filtered.harmony.embed <- Embeddings(merged_seurat_filtered.harmony, "harmony")
#merged_seurat_filtered.harmony.embed[1:10,1:10]



# Do UMAP and clustering using ** Harmony embeddings instead of PCA **
 merged_seurat_filtered.harmony <- merged_seurat_filtered.harmony %>%
   RunUMAP(reduction = 'harmony', dims = 1:30) %>%
   FindNeighbors(reduction = "harmony", dims = 1:30) %>%
   FindClusters(resolution = 0.5)
17:41:37 UMAP embedding parameters a = 0.9922 b = 1.112
17:41:37 Read 49193 rows and found 30 numeric columns
17:41:37 Using Annoy for neighbor search, n_neighbors = 30
17:41:37 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
17:41:41 Writing NN index file to temp file /tmp/Rtmph6UMoo/filec8ace5144214a
17:41:41 Searching Annoy index using 1 thread, search_k = 3000
17:41:52 Annoy recall = 100%
17:41:53 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
17:41:55 Initializing from normalized Laplacian + noise (using RSpectra)
17:41:57 Commencing optimization for 200 epochs, with 2110034 positive edges
Using method 'umap'
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
17:42:13 Optimization finished
Computing nearest neighbor graph
Computing SNN
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 49193
Number of edges: 1704400

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9163
Number of communities: 18
Elapsed time: 9 seconds
# visualize 


after <- DimPlot(merged_seurat_filtered.harmony, reduction = "umap", group.by = "cell_line", label = TRUE, label.box = TRUE, repel = TRUE)

before|after


DimPlot(merged_seurat_filtered.harmony,reduction = "umap", group.by = "RNA_snn_res.0.5", label = TRUE, label.box = TRUE, repel = TRUE)


DimPlot(merged_seurat_filtered.harmony, reduction = "umap", group.by = "predicted.celltype.l2", label = TRUE, label.box = TRUE, repel = TRUE)

FeaturePlot



myfeatures <- c("CD3E", "CD4", "CD8A", "NKG7", "GNLY", "MS4A1", "CD14", "LYZ", "MS4A7", "FCGR3A", "CST3", "FCER1A")

FeaturePlot(merged_seurat_filtered.harmony, reduction = "umap", dims = 1:2, features = myfeatures, ncol = 4, order = T) + NoLegend() + NoAxes() + NoGrid()

5. Save the Seurat object as an Robj file


 save(merged_seurat_filtered.harmony, file = "seurat.integrated_K_code_Harmony.Robj")
LS0tCnRpdGxlOiAiSW50ZWdyYXRpb24gYnkgSGFybW9ueV9ieV9LIgphdXRob3I6IE5hc2lyIE1haG1vb2QgQWJiYXNpCmRhdGU6ICIyMDI0LTA1LTEwIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jX2NvbGxhcHNlZDogdHJ1ZQogICAgdGhlbWU6IGRhcmtseQotLS0KIyAxLiBsb2FkIGxpYnJhcmllcwpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KbGlicmFyeShTZXVyYXQpCmxpYnJhcnkoU2V1cmF0T2JqZWN0KQpsaWJyYXJ5KFNldXJhdERhdGEpCmxpYnJhcnkocGF0Y2h3b3JrKQpsaWJyYXJ5KGhhcm1vbnkpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShyZXRpY3VsYXRlKQpsaWJyYXJ5KEF6aW11dGgpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoUnRzbmUpCmxpYnJhcnkoaGFybW9ueSkKbGlicmFyeShncmlkRXh0cmEpCmBgYAoKIyAyLiBMb2FkIFNldXJhdCBPYmplY3QgCmBgYHtyIGxvYWRfc2V1cmF0fQoKICMgbG9hZCgiQWxsU2FtcGxlX2NvcnJlY3RlZF9BemltdXRoQW5ub3RhdGVkX0wxLlJvYmoiKQogIyAKICMgbWVyZ2VkX3NldXJhdF9maWx0ZXJlZCA8LSBBbGxfc2FtcGxlc19NZXJnZWQKCm1lcmdlZF9zZXVyYXRfZmlsdGVyZWQKCmBgYAoKCiMgMy4gRGF0YSBQUkVQRVJBVElPTgpgYGB7ciBkYXRhLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KCiMgIyBwZXJmb3JtIHN0YW5kYXJkIHdvcmtmbG93IHN0ZXBzIHRvIGZpZ3VyZSBvdXQgaWYgd2Ugc2VlIGFueSBiYXRjaCBlZmZlY3RzIC0tLS0tLS0tCiMgbWVyZ2VkX3NldXJhdF9maWx0ZXJlZCA8LSBOb3JtYWxpemVEYXRhKG9iamVjdCA9IG1lcmdlZF9zZXVyYXRfZmlsdGVyZWQsIHZlcmJvc2UgPSBGQUxTRSkKIyBtZXJnZWRfc2V1cmF0X2ZpbHRlcmVkIDwtIEZpbmRWYXJpYWJsZUZlYXR1cmVzKG9iamVjdCA9IG1lcmdlZF9zZXVyYXRfZmlsdGVyZWQgLCBzZWxlY3Rpb24ubWV0aG9kID0gInZzdCIsIG5mZWF0dXJlcyA9IDIwMDAsdmVyYm9zZSA9IEZBTFNFKQojIAojIG1lcmdlZF9zZXVyYXRfZmlsdGVyZWQgPC0gU2NhbGVEYXRhKG9iamVjdCA9IG1lcmdlZF9zZXVyYXRfZmlsdGVyZWQpCiMgCiMgCiMgVmFyaWFibGVfZ2VuZXMgPC0gbWVyZ2VkX3NldXJhdF9maWx0ZXJlZEBhc3NheXMkUk5BQHZhci5mZWF0dXJlcwojIAojIFZhcmlhYmxlc19nZW5lc19hZnRlcl9leGNsdXNpb24gPC0gVmFyaWFibGVfZ2VuZXNbIWdyZXBsKCJeSExBLXxeWGlzdCIsIFZhcmlhYmxlX2dlbmVzKV0KIyAKIyBtZXJnZWRfc2V1cmF0X2ZpbHRlcmVkIDwtIFJ1blBDQShtZXJnZWRfc2V1cmF0X2ZpbHRlcmVkLAojICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyA9IFZhcmlhYmxlc19nZW5lc19hZnRlcl9leGNsdXNpb24sCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGRvLnByaW50ID0gVFJVRSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgcGNzLnByaW50ID0gMTo1LAojICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcy5wcmludCA9IDE1KQoKRWxib3dQbG90KG1lcmdlZF9zZXVyYXRfZmlsdGVyZWQpCgoKIyBtZXJnZWRfc2V1cmF0X2ZpbHRlcmVkIDwtIFJ1blVNQVAob2JqZWN0ID0gbWVyZ2VkX3NldXJhdF9maWx0ZXJlZCwgZGltcyA9IDE6MjApCgoKIyBwbG90CmJlZm9yZSA8LSBEaW1QbG90KG1lcmdlZF9zZXVyYXRfZmlsdGVyZWQsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAiY2VsbF9saW5lIiwgbGFiZWwgPSBUUlVFLCBsYWJlbC5ib3ggPSBUUlVFLCByZXBlbCA9IFRSVUUpCgoKCkRpbVBsb3QobWVyZ2VkX3NldXJhdF9maWx0ZXJlZCwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJjZWxsX2xpbmUiLCBsYWJlbCA9IFRSVUUsIGxhYmVsLmJveCA9IFRSVUUsIHJlcGVsID0gVFJVRSkKCgoKYGBgCgoKIyA0LiBIYXJtb255LWludGVncmF0aW9uCmBgYHtyIGludGVncmF0aW9uLWhhcm1vbnksIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQoKIyBydW4gSGFybW9ueSAtLS0tLS0tLS0tLQojIG1lcmdlZF9zZXVyYXRfZmlsdGVyZWQuaGFybW9ueSA8LSBtZXJnZWRfc2V1cmF0X2ZpbHRlcmVkICU+JQojICAgUnVuSGFybW9ueShncm91cC5ieS52YXJzID0gJ29yaWcuaWRlbnQnLCBwbG90X2NvbnZlcmdlbmNlID0gRkFMU0UpCiMgCiMgbWVyZ2VkX3NldXJhdF9maWx0ZXJlZC5oYXJtb255QHJlZHVjdGlvbnMKIyAKIyBtZXJnZWRfc2V1cmF0X2ZpbHRlcmVkLmhhcm1vbnkuZW1iZWQgPC0gRW1iZWRkaW5ncyhtZXJnZWRfc2V1cmF0X2ZpbHRlcmVkLmhhcm1vbnksICJoYXJtb255IikKI21lcmdlZF9zZXVyYXRfZmlsdGVyZWQuaGFybW9ueS5lbWJlZFsxOjEwLDE6MTBdCgoKCiMgRG8gVU1BUCBhbmQgY2x1c3RlcmluZyB1c2luZyAqKiBIYXJtb255IGVtYmVkZGluZ3MgaW5zdGVhZCBvZiBQQ0EgKioKIG1lcmdlZF9zZXVyYXRfZmlsdGVyZWQuaGFybW9ueSA8LSBtZXJnZWRfc2V1cmF0X2ZpbHRlcmVkLmhhcm1vbnkgJT4lCiAgIFJ1blVNQVAocmVkdWN0aW9uID0gJ2hhcm1vbnknLCBkaW1zID0gMTozMCkgJT4lCiAgIEZpbmROZWlnaGJvcnMocmVkdWN0aW9uID0gImhhcm1vbnkiLCBkaW1zID0gMTozMCkgJT4lCiAgIEZpbmRDbHVzdGVycyhyZXNvbHV0aW9uID0gMC41KQoKIyB2aXN1YWxpemUgCgoKYWZ0ZXIgPC0gRGltUGxvdChtZXJnZWRfc2V1cmF0X2ZpbHRlcmVkLmhhcm1vbnksIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAiY2VsbF9saW5lIiwgbGFiZWwgPSBUUlVFLCBsYWJlbC5ib3ggPSBUUlVFLCByZXBlbCA9IFRSVUUpCgpiZWZvcmV8YWZ0ZXIKCkRpbVBsb3QobWVyZ2VkX3NldXJhdF9maWx0ZXJlZC5oYXJtb255LHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAiUk5BX3Nubl9yZXMuMC41IiwgbGFiZWwgPSBUUlVFLCBsYWJlbC5ib3ggPSBUUlVFLCByZXBlbCA9IFRSVUUpCgpEaW1QbG90KG1lcmdlZF9zZXVyYXRfZmlsdGVyZWQuaGFybW9ueSwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJwcmVkaWN0ZWQuY2VsbHR5cGUubDIiLCBsYWJlbCA9IFRSVUUsIGxhYmVsLmJveCA9IFRSVUUsIHJlcGVsID0gVFJVRSkKCmBgYAoKCiMgRmVhdHVyZVBsb3QKYGBge3IgZmVhdHVyZXBsb3QtaGFybW9ueSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgoKbXlmZWF0dXJlcyA8LSBjKCJDRDNFIiwgIkNENCIsICJDRDhBIiwgIk5LRzciLCAiR05MWSIsICJNUzRBMSIsICJDRDE0IiwgIkxZWiIsICJNUzRBNyIsICJGQ0dSM0EiLCAiQ1NUMyIsICJGQ0VSMUEiKQoKRmVhdHVyZVBsb3QobWVyZ2VkX3NldXJhdF9maWx0ZXJlZC5oYXJtb255LCByZWR1Y3Rpb24gPSAidW1hcCIsIGRpbXMgPSAxOjIsIGZlYXR1cmVzID0gbXlmZWF0dXJlcywgbmNvbCA9IDQsIG9yZGVyID0gVCkgKyBOb0xlZ2VuZCgpICsgTm9BeGVzKCkgKyBOb0dyaWQoKQoKYGBgCgoKIyA1LiBTYXZlIHRoZSBTZXVyYXQgb2JqZWN0IGFzIGFuIFJvYmogZmlsZQpgYGB7ciBzYXZlUk9CSn0KCiMgc2F2ZShtZXJnZWRfc2V1cmF0X2ZpbHRlcmVkLmhhcm1vbnksIGZpbGUgPSAic2V1cmF0LmludGVncmF0ZWRfS19jb2RlX0hhcm1vbnkuUm9iaiIpCgoKYGBgCgoKCgo=