1. load libraries

2. Load Seurat Object


#Load Seurat Object merged from cell lines and a control(PBMC) after filtration
SS_All_samples_Merged <- load("../../../0-IMP-OBJECTS/All_Samples_Merged_with_10x_Azitmuth_Annotated_SCT_HPC_without_harmony_integration.robj")

All_samples_Merged
An object of class Seurat 
64169 features across 59355 samples within 6 assays 
Active assay: SCT (27417 features, 3000 variable features)
 3 layers present: counts, data, scale.data
 5 other assays present: RNA, ADT, prediction.score.celltype.l1, prediction.score.celltype.l2, prediction.score.celltype.l3
 4 dimensional reductions calculated: integrated_dr, ref.umap, pca, umap

3. UMAP plots


P1 <- DimPlot(object = All_samples_Merged, group.by = "cell_line", label = T, label.box = T) + 
  labs(title = 'Colored by cellline')
P1



P2 <- DimPlot(object = All_samples_Merged, group.by = "predicted.celltype.l2") + 
  labs(title = 'Colored by celltype')
P2



P3 <- DimPlot(object = All_samples_Merged, group.by = "cell_line", reduction = "pca") + 
  labs(title = 'Colored by cellline')
P3



P4 <- DimPlot(object = All_samples_Merged, group.by = "predicted.celltype.l2", reduction = "pca") + 
  labs(title = 'Colored by celltype')
P4


cowplot::plot_grid(P1, P2, P3, P4, nrow = 2)


cell_distribution_table <- table(All_samples_Merged$predicted.celltype.l2, All_samples_Merged$seurat_clusters)

cell_distribution_df <- as.data.frame.matrix(cell_distribution_table)


print(cell_distribution_df)


#write.csv(cell_distribution_df, file = "test2.csv", row.names = TRUE)

6. Apply Harmony



All_samples_Merged_integrated <- RunHarmony(All_samples_Merged, "cell_line")
Transposing data matrix
Initializing state using k-means centroids initialization
Harmony 1/10
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Harmony 2/10
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Harmony 3/10
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Harmony converged after 3 iterations
# Do UMAP and clustering using ** Harmony embeddings instead of PCA **
All_samples_Merged_integrated <- All_samples_Merged_integrated %>%
   RunUMAP(reduction = 'harmony', dims = 1:22) %>%
   FindNeighbors(reduction = "harmony", dims = 1:22) %>%
   FindClusters(resolution = 0.5)
Avis : The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
This message will be shown once per session15:25:38 UMAP embedding parameters a = 0.9922 b = 1.112
15:25:38 Read 59355 rows and found 22 numeric columns
15:25:38 Using Annoy for neighbor search, n_neighbors = 30
15:25:38 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
15:25:46 Writing NN index file to temp file /tmp/RtmpOpTF6v/file37a9016be5962
15:25:46 Searching Annoy index using 1 thread, search_k = 3000
15:26:14 Annoy recall = 100%
15:26:15 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
15:26:20 Initializing from normalized Laplacian + noise (using RSpectra)
15:26:24 Commencing optimization for 200 epochs, with 2572158 positive edges
Using method 'umap'
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
15:27:01 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: 59355
Number of edges: 1778039

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

DimPlot(object = All_samples_Merged_integrated, group.by = "predicted.celltype.l2", label = T, label.box = T, repel = T, reduction = "umap")


DimPlot(object = All_samples_Merged_integrated, group.by = "predicted.celltype.l2", label = T, label.box = T, repel = T, reduction = "harmony")


DimPlot(object = All_samples_Merged_integrated, group.by = "predicted.celltype.l2", label = T, label.box = T, repel = T, reduction = "integrated_dr")


DimPlot(object = All_samples_Merged_integrated, group.by = "predicted.celltype.l2", label = T, label.box = T, repel = T, reduction = "pca")


DimPlot(object = All_samples_Merged_integrated, group.by = "predicted.celltype.l2", label = T, label.box = T, repel = T, reduction = "ref.umap")



DimPlot(object = All_samples_Merged_integrated, group.by = "cell_line", label = T, label.box = T, repel = T, reduction = "umap")


DimPlot(object = All_samples_Merged_integrated, group.by = "seurat_clusters", label = T, label.box = T, repel = T, reduction = "umap")

7. Cell Distribution



cell_distribution_table <- table(All_samples_Merged_integrated$cell_line, All_samples_Merged_integrated$seurat_clusters)

cell_distribution_df <- as.data.frame.matrix(cell_distribution_table)


print(cell_distribution_df)


#write.csv(cell_distribution_df, file = "15-2-integration_table_HARMONY-TEST1.csv", row.names = TRUE)


cell_distribution_table <- table(All_samples_Merged_integrated$predicted.celltype.l2, All_samples_Merged_integrated$seurat_clusters)

cell_distribution_df <- as.data.frame.matrix(cell_distribution_table)


print(cell_distribution_df)


#write.csv(cell_distribution_df, file = "15-2-integration_table_HARMONY-TEST1_annotationbased.csv", row.names = TRUE)


cell_distribution_table <- table(All_samples_Merged_integrated$predicted.celltype.l1, All_samples_Merged_integrated$seurat_clusters)

cell_distribution_df <- as.data.frame.matrix(cell_distribution_table)


print(cell_distribution_df)


#write.csv(cell_distribution_df, file = "15-2-integration_table_HARMONY-TEST1_annotationbased_l1.csv", row.names = TRUE)

cell_distribution_table <- table(All_samples_Merged_integrated$predicted.celltype.l2, All_samples_Merged_integrated$cell_line)

cell_distribution_df <- as.data.frame.matrix(cell_distribution_table)


print(cell_distribution_df)


#write.csv(cell_distribution_df, file = "15-2-integration_table_HARMONY-TEST1_annotationbased_cellline.csv", row.names = TRUE)

Save the Seurat object as an Robj file———————————————————————-



# save
#save(All_samples_Merged_integrated,file = "15-2_All_samples_Merged_integrated.Robj")

```

LS0tCnRpdGxlOiAiSGFybW9ueSBJbnRlZ3JhdGlvbiBvZiBQQk1DMTB4LXBhcnQ1IgphdXRob3I6IE5hc2lyIE1haG1vb2QgQWJiYXNpCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OgogICNybWRmb3JtYXRzOjpyZWFkdGhlZG93bgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jX2NvbGxhcHNlZDogdHJ1ZQotLS0KCiMgMS4gbG9hZCBsaWJyYXJpZXMKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CgpsaWJyYXJ5KFNldXJhdCkKbGlicmFyeShTZXVyYXRPYmplY3QpCmxpYnJhcnkoU2V1cmF0RGF0YSkKbGlicmFyeShwYXRjaHdvcmspCmxpYnJhcnkoQXppbXV0aCkKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShybWFya2Rvd24pCmxpYnJhcnkodGlueXRleCkKCgpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGRpdHRvU2VxKQpsaWJyYXJ5KGdncmVwZWwpCiNsaWJyYXJ5KGdndHJlZSkKbGlicmFyeShwYXJhbGxlbCkKbGlicmFyeShwbG90bHkpICAjIDNEIHBsb3QKbGlicmFyeShTZXVyYXQpICAjIElkZW50cygpCmxpYnJhcnkoU2V1cmF0RGlzaykgICMgU2F2ZUg1U2V1cmF0KCkKbGlicmFyeSh0aWJibGUpICAjIHJvd25uYW1lc190b19jb2x1bW4KbGlicmFyeShoYXJtb255KSAjIFJ1bkhhcm1vbnkoKQojb3B0aW9ucyhtYy5jb3JlcyA9IGRldGVjdENvcmVzKCkgLSAxKQoKCgpgYGAKCgojIDIuIExvYWQgU2V1cmF0IE9iamVjdCAKYGBge3IgbG9hZF9zZXVyYXR9CgojTG9hZCBTZXVyYXQgT2JqZWN0IG1lcmdlZCBmcm9tIGNlbGwgbGluZXMgYW5kIGEgY29udHJvbChQQk1DKSBhZnRlciBmaWx0cmF0aW9uClNTX0FsbF9zYW1wbGVzX01lcmdlZCA8LSBsb2FkKCIuLi8uLi8uLi8wLUlNUC1PQkpFQ1RTL0FsbF9TYW1wbGVzX01lcmdlZF93aXRoXzEweF9Beml0bXV0aF9Bbm5vdGF0ZWRfU0NUX0hQQ193aXRob3V0X2hhcm1vbnlfaW50ZWdyYXRpb24ucm9iaiIpCgpBbGxfc2FtcGxlc19NZXJnZWQKYGBgCgoKCgojIDMuIFVNQVAgcGxvdHMKYGBge3IgUENBLVRFU1QsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQoKUDEgPC0gRGltUGxvdChvYmplY3QgPSBBbGxfc2FtcGxlc19NZXJnZWQsIGdyb3VwLmJ5ID0gImNlbGxfbGluZSIsIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkgKyAKICBsYWJzKHRpdGxlID0gJ0NvbG9yZWQgYnkgY2VsbGxpbmUnKQpQMQoKClAyIDwtIERpbVBsb3Qob2JqZWN0ID0gQWxsX3NhbXBsZXNfTWVyZ2VkLCBncm91cC5ieSA9ICJwcmVkaWN0ZWQuY2VsbHR5cGUubDIiKSArIAogIGxhYnModGl0bGUgPSAnQ29sb3JlZCBieSBjZWxsdHlwZScpClAyCgoKUDMgPC0gRGltUGxvdChvYmplY3QgPSBBbGxfc2FtcGxlc19NZXJnZWQsIGdyb3VwLmJ5ID0gImNlbGxfbGluZSIsIHJlZHVjdGlvbiA9ICJwY2EiKSArIAogIGxhYnModGl0bGUgPSAnQ29sb3JlZCBieSBjZWxsbGluZScpClAzCgoKUDQgPC0gRGltUGxvdChvYmplY3QgPSBBbGxfc2FtcGxlc19NZXJnZWQsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMiIsIHJlZHVjdGlvbiA9ICJwY2EiKSArIAogIGxhYnModGl0bGUgPSAnQ29sb3JlZCBieSBjZWxsdHlwZScpClA0Cgpjb3dwbG90OjpwbG90X2dyaWQoUDEsIFAyLCBQMywgUDQsIG5yb3cgPSAyKQoKY2VsbF9kaXN0cmlidXRpb25fdGFibGUgPC0gdGFibGUoQWxsX3NhbXBsZXNfTWVyZ2VkJHByZWRpY3RlZC5jZWxsdHlwZS5sMiwgQWxsX3NhbXBsZXNfTWVyZ2VkJHNldXJhdF9jbHVzdGVycykKCmNlbGxfZGlzdHJpYnV0aW9uX2RmIDwtIGFzLmRhdGEuZnJhbWUubWF0cml4KGNlbGxfZGlzdHJpYnV0aW9uX3RhYmxlKQoKCnByaW50KGNlbGxfZGlzdHJpYnV0aW9uX2RmKQoKCiN3cml0ZS5jc3YoY2VsbF9kaXN0cmlidXRpb25fZGYsIGZpbGUgPSAidGVzdDIuY3N2Iiwgcm93Lm5hbWVzID0gVFJVRSkKCgpgYGAKIyA2LiBBcHBseSBIYXJtb255CmBgYHtyIEMxLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KCgpBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCA8LSBSdW5IYXJtb255KEFsbF9zYW1wbGVzX01lcmdlZCwgImNlbGxfbGluZSIpCiMgRG8gVU1BUCBhbmQgY2x1c3RlcmluZyB1c2luZyAqKiBIYXJtb255IGVtYmVkZGluZ3MgaW5zdGVhZCBvZiBQQ0EgKioKQWxsX3NhbXBsZXNfTWVyZ2VkX2ludGVncmF0ZWQgPC0gQWxsX3NhbXBsZXNfTWVyZ2VkX2ludGVncmF0ZWQgJT4lCiAgIFJ1blVNQVAocmVkdWN0aW9uID0gJ2hhcm1vbnknLCBkaW1zID0gMToyMikgJT4lCiAgIEZpbmROZWlnaGJvcnMocmVkdWN0aW9uID0gImhhcm1vbnkiLCBkaW1zID0gMToyMikgJT4lCiAgIEZpbmRDbHVzdGVycyhyZXNvbHV0aW9uID0gMC41KQpgYGAKCgpgYGB7ciBDMiwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgpEaW1QbG90KG9iamVjdCA9IEFsbF9zYW1wbGVzX01lcmdlZF9pbnRlZ3JhdGVkLCBncm91cC5ieSA9ICJwcmVkaWN0ZWQuY2VsbHR5cGUubDIiLCBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQsIHJlcGVsID0gVCwgcmVkdWN0aW9uID0gInVtYXAiKQoKRGltUGxvdChvYmplY3QgPSBBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwyIiwgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBULCByZXBlbCA9IFQsIHJlZHVjdGlvbiA9ICJoYXJtb255IikKCkRpbVBsb3Qob2JqZWN0ID0gQWxsX3NhbXBsZXNfTWVyZ2VkX2ludGVncmF0ZWQsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMiIsIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCwgcmVwZWwgPSBULCByZWR1Y3Rpb24gPSAiaW50ZWdyYXRlZF9kciIpCgpEaW1QbG90KG9iamVjdCA9IEFsbF9zYW1wbGVzX01lcmdlZF9pbnRlZ3JhdGVkLCBncm91cC5ieSA9ICJwcmVkaWN0ZWQuY2VsbHR5cGUubDIiLCBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQsIHJlcGVsID0gVCwgcmVkdWN0aW9uID0gInBjYSIpCgpEaW1QbG90KG9iamVjdCA9IEFsbF9zYW1wbGVzX01lcmdlZF9pbnRlZ3JhdGVkLCBncm91cC5ieSA9ICJwcmVkaWN0ZWQuY2VsbHR5cGUubDIiLCBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQsIHJlcGVsID0gVCwgcmVkdWN0aW9uID0gInJlZi51bWFwIikKCgpEaW1QbG90KG9iamVjdCA9IEFsbF9zYW1wbGVzX01lcmdlZF9pbnRlZ3JhdGVkLCBncm91cC5ieSA9ICJjZWxsX2xpbmUiLCBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQsIHJlcGVsID0gVCwgcmVkdWN0aW9uID0gInVtYXAiKQoKRGltUGxvdChvYmplY3QgPSBBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCwgZ3JvdXAuYnkgPSAic2V1cmF0X2NsdXN0ZXJzIiwgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBULCByZXBlbCA9IFQsIHJlZHVjdGlvbiA9ICJ1bWFwIikKCmBgYAoKIyA3LiBDZWxsIERpc3RyaWJ1dGlvbgpgYGB7ciBjZWxsRH0KCgpjZWxsX2Rpc3RyaWJ1dGlvbl90YWJsZSA8LSB0YWJsZShBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCRjZWxsX2xpbmUsIEFsbF9zYW1wbGVzX01lcmdlZF9pbnRlZ3JhdGVkJHNldXJhdF9jbHVzdGVycykKCmNlbGxfZGlzdHJpYnV0aW9uX2RmIDwtIGFzLmRhdGEuZnJhbWUubWF0cml4KGNlbGxfZGlzdHJpYnV0aW9uX3RhYmxlKQoKCnByaW50KGNlbGxfZGlzdHJpYnV0aW9uX2RmKQoKCiN3cml0ZS5jc3YoY2VsbF9kaXN0cmlidXRpb25fZGYsIGZpbGUgPSAiMTUtMi1pbnRlZ3JhdGlvbl90YWJsZV9IQVJNT05ZLVRFU1QxLmNzdiIsIHJvdy5uYW1lcyA9IFRSVUUpCgoKY2VsbF9kaXN0cmlidXRpb25fdGFibGUgPC0gdGFibGUoQWxsX3NhbXBsZXNfTWVyZ2VkX2ludGVncmF0ZWQkcHJlZGljdGVkLmNlbGx0eXBlLmwyLCBBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCRzZXVyYXRfY2x1c3RlcnMpCgpjZWxsX2Rpc3RyaWJ1dGlvbl9kZiA8LSBhcy5kYXRhLmZyYW1lLm1hdHJpeChjZWxsX2Rpc3RyaWJ1dGlvbl90YWJsZSkKCgpwcmludChjZWxsX2Rpc3RyaWJ1dGlvbl9kZikKCgojd3JpdGUuY3N2KGNlbGxfZGlzdHJpYnV0aW9uX2RmLCBmaWxlID0gIjE1LTItaW50ZWdyYXRpb25fdGFibGVfSEFSTU9OWS1URVNUMV9hbm5vdGF0aW9uYmFzZWQuY3N2Iiwgcm93Lm5hbWVzID0gVFJVRSkKCgpjZWxsX2Rpc3RyaWJ1dGlvbl90YWJsZSA8LSB0YWJsZShBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCRwcmVkaWN0ZWQuY2VsbHR5cGUubDEsIEFsbF9zYW1wbGVzX01lcmdlZF9pbnRlZ3JhdGVkJHNldXJhdF9jbHVzdGVycykKCmNlbGxfZGlzdHJpYnV0aW9uX2RmIDwtIGFzLmRhdGEuZnJhbWUubWF0cml4KGNlbGxfZGlzdHJpYnV0aW9uX3RhYmxlKQoKCnByaW50KGNlbGxfZGlzdHJpYnV0aW9uX2RmKQoKCiN3cml0ZS5jc3YoY2VsbF9kaXN0cmlidXRpb25fZGYsIGZpbGUgPSAiMTUtMi1pbnRlZ3JhdGlvbl90YWJsZV9IQVJNT05ZLVRFU1QxX2Fubm90YXRpb25iYXNlZF9sMS5jc3YiLCByb3cubmFtZXMgPSBUUlVFKQoKY2VsbF9kaXN0cmlidXRpb25fdGFibGUgPC0gdGFibGUoQWxsX3NhbXBsZXNfTWVyZ2VkX2ludGVncmF0ZWQkcHJlZGljdGVkLmNlbGx0eXBlLmwyLCBBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCRjZWxsX2xpbmUpCgpjZWxsX2Rpc3RyaWJ1dGlvbl9kZiA8LSBhcy5kYXRhLmZyYW1lLm1hdHJpeChjZWxsX2Rpc3RyaWJ1dGlvbl90YWJsZSkKCgpwcmludChjZWxsX2Rpc3RyaWJ1dGlvbl9kZikKCgojd3JpdGUuY3N2KGNlbGxfZGlzdHJpYnV0aW9uX2RmLCBmaWxlID0gIjE1LTItaW50ZWdyYXRpb25fdGFibGVfSEFSTU9OWS1URVNUMV9hbm5vdGF0aW9uYmFzZWRfY2VsbGxpbmUuY3N2Iiwgcm93Lm5hbWVzID0gVFJVRSkKCgpgYGAKCiMgU2F2ZSB0aGUgU2V1cmF0IG9iamVjdCBhcyBhbiBSb2JqIGZpbGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmBgYHtyIHNhdmVSRFN9CgoKIyBzYXZlCiNzYXZlKEFsbF9zYW1wbGVzX01lcmdlZF9pbnRlZ3JhdGVkLGZpbGUgPSAiMTUtMl9BbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZC5Sb2JqIikKCmBgYAoKYGBgCgoKCg==