1. load libraries
2. Load Seurat Object
All_samples_Merged
An object of class Seurat
62625 features across 46976 samples within 6 assays
Active assay: SCT (25901 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: pca, umap, integrated_dr, ref.umap
3. Data PREPERATION
ElbowPlot(All_samples_Merged)

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

NA
NA
NA
4. Harmony-integration
# run Harmony -----------
All_samples_Merged_Harmony_Integrated <- All_samples_Merged %>%
RunHarmony(group.by.vars = 'orig.ident', plot_convergence = FALSE)
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 converged after 2 iterations
All_samples_Merged_Harmony_Integrated@reductions
$pca
A dimensional reduction object with key PC_
Number of dimensions: 50
Number of cells: 46976
Projected dimensional reduction calculated: FALSE
Jackstraw run: FALSE
Computed using assay: SCT
$umap
A dimensional reduction object with key umap_
Number of dimensions: 2
Number of cells: 46976
Projected dimensional reduction calculated: FALSE
Jackstraw run: FALSE
Computed using assay: SCT
$integrated_dr
A dimensional reduction object with key integrateddr_
Number of dimensions: 50
Number of cells: 46976
Projected dimensional reduction calculated: FALSE
Jackstraw run: FALSE
Computed using assay: SCT
$ref.umap
A dimensional reduction object with key UMAP_
Number of dimensions: 2
Number of cells: 46976
Projected dimensional reduction calculated: FALSE
Jackstraw run: FALSE
Computed using assay: RNA
$harmony
A dimensional reduction object with key harmony_
Number of dimensions: 50
Number of cells: 46976
Projected dimensional reduction calculated: TRUE
Jackstraw run: FALSE
Computed using assay: SCT
All_samples_Merged_Harmony_Integrated.embed <- Embeddings(All_samples_Merged_Harmony_Integrated, "harmony")
All_samples_Merged_Harmony_Integrated.embed[1:10,1:10]
harmony_1 harmony_2 harmony_3 harmony_4 harmony_5 harmony_6 harmony_7 harmony_8 harmony_9
L1_AAACCTGAGGGCTTCC-1 3.930011 0.7522262 -2.110055 4.773869 2.1750463 0.817792877 1.5898612 -1.657756 -6.4216000
L1_AAACCTGGTGCAGGTA-1 -10.425288 -0.7127626 -2.571288 9.321215 -0.7627203 9.776243840 -0.1976164 1.364135 1.3972471
L1_AAACCTGGTTAAAGTG-1 -13.570800 -8.8580263 1.544664 6.615586 1.2933943 3.989043556 1.0894727 -2.996915 4.5499349
L1_AAACCTGTCAGGTAAA-1 -1.827420 -5.5824516 1.981894 2.077667 2.0384860 0.002298915 -2.8482661 -1.327224 4.5527668
L1_AAACCTGTCCCTGACT-1 5.005414 1.9898605 -6.825308 2.266979 -1.0807969 1.235699777 1.0048150 -1.139788 -3.4462636
L1_AAACCTGTCCTTCAAT-1 -12.327984 -5.0089178 -1.818867 6.351098 -1.1000114 5.851202967 3.6618221 -1.357876 0.8172072
L1_AAACCTGTCTTGCAAG-1 -13.943001 -3.1867878 -2.059097 6.016835 -2.2830143 7.949084787 4.0782511 -2.923581 4.0621949
L1_AAACGGGAGGCTAGAC-1 -3.347339 -5.2998819 1.413381 5.067610 0.8416488 -0.382886526 -1.6293074 -4.091839 3.4044487
L1_AAACGGGAGGGTATCG-1 -3.941779 -1.4028403 1.345789 5.063883 -1.1777797 0.477552100 -0.1966721 -3.171414 4.1788198
L1_AAACGGGAGGGTTCCC-1 12.852076 0.5849897 2.823838 -4.883418 0.9214000 -10.244227045 -2.6604167 1.136342 -2.5039421
harmony_10
L1_AAACCTGAGGGCTTCC-1 1.4913999
L1_AAACCTGGTGCAGGTA-1 -0.9712920
L1_AAACCTGGTTAAAGTG-1 3.1960910
L1_AAACCTGTCAGGTAAA-1 1.0732609
L1_AAACCTGTCCCTGACT-1 0.9597765
L1_AAACCTGTCCTTCAAT-1 2.4723096
L1_AAACCTGTCTTGCAAG-1 2.9507128
L1_AAACGGGAGGCTAGAC-1 2.5150597
L1_AAACGGGAGGGTATCG-1 3.7960851
L1_AAACGGGAGGGTTCCC-1 -0.0541667
# Do UMAP and clustering using ** Harmony embeddings instead of PCA **
All_samples_Merged_Harmony_Integrated <- All_samples_Merged_Harmony_Integrated %>%
RunUMAP(reduction = 'harmony', dims = 1:13)
15:13:57 UMAP embedding parameters a = 0.9922 b = 1.112
15:13:57 Read 46976 rows and found 13 numeric columns
15:13:57 Using Annoy for neighbor search, n_neighbors = 30
15:13:57 Building Annoy index with metric = cosine, n_trees = 50
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
15:14:00 Writing NN index file to temp file /tmp/Rtmp2eQfbV/filef36db6c1e4956
15:14:00 Searching Annoy index using 1 thread, search_k = 3000
15:14:11 Annoy recall = 100%
15:14:12 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
15:14:14 Initializing from normalized Laplacian + noise (using RSpectra)
15:14:15 Commencing optimization for 200 epochs, with 1955416 positive edges
Using method 'umap'
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
15:14:30 Optimization finished
# visualize
after <- DimPlot(All_samples_Merged_Harmony_Integrated, reduction = "umap", group.by = "cell_line", label = TRUE, label.box = TRUE, repel = TRUE)
before|after

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

DimPlot(All_samples_Merged_Harmony_Integrated,reduction = "umap", group.by = "SCT_snn_res.0.5", label = TRUE, label.box = TRUE, repel = TRUE)

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

FeaturePlot
myfeatures <- c("CD3E", "CD4", "CD8A", "CD8B", "GNLY", "MS4A1", "CD14", "LYZ", "MS4A7", "FOXP3", "TIGIT", "KIR3DL2", "GZMA", "CCL17", "CCL5", "CD52", "CD7", "CD26")
FeaturePlot(All_samples_Merged_Harmony_Integrated, reduction = "umap", dims = 1:2, features = myfeatures, ncol = 4, order = T) + NoLegend() + NoAxes() + NoGrid()
Warning: Could not find CD26 in the default search locations, found in 'ADT' assay instead

5. Save the Seurat object as an Robj file
# save(All_samples_Merged_Harmony_Integrated, file = "All_samples_Merged_Harmony_Integrated.Robj")
LS0tCnRpdGxlOiAiSW50ZWdyYXRpb24gYnkgSGFybW9ueV9vbl9TQ1RyYW5zZm9ybV9EQVRBIgphdXRob3I6IE5hc2lyIE1haG1vb2QgQWJiYXNpCmRhdGU6ICIyMDI0LTA1LTE3IgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jX2NvbGxhcHNlZDogdHJ1ZQogICAgdGhlbWU6IGRhcmtseQotLS0KIyAxLiBsb2FkIGxpYnJhcmllcwpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KbGlicmFyeShTZXVyYXQpCmxpYnJhcnkoU2V1cmF0T2JqZWN0KQpsaWJyYXJ5KFNldXJhdERhdGEpCmxpYnJhcnkocGF0Y2h3b3JrKQpsaWJyYXJ5KGhhcm1vbnkpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShyZXRpY3VsYXRlKQpsaWJyYXJ5KEF6aW11dGgpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoUnRzbmUpCmxpYnJhcnkoaGFybW9ueSkKbGlicmFyeShncmlkRXh0cmEpCmBgYAoKIyAyLiBMb2FkIFNldXJhdCBPYmplY3QgCmBgYHtyIGxvYWRfc2V1cmF0fQoKIGxvYWQoIi9ob21lL2Jpb2luZm8vQ2x1c3Rlcl90b19Db21wdXRlcl9UcmFuc2Zlcl9maWxlc19mb2xkZXIvQWxsX05vcm1hbC1QQk1DX0Fibm9ybWFsLWNlbGxMaW5lc19UX2NlbGxzX01lcmdlZF9Bbm5vdGF0ZWRfVU1BUF9vbl9DbHVzdGVyc190b19VU0UuUm9iaiIpCiAKICBBbGxfc2FtcGxlc19NZXJnZWQKCgpgYGAKCgojIDMuIERhdGEgUFJFUEVSQVRJT04KYGBge3IgZGF0YSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgoKRWxib3dQbG90KEFsbF9zYW1wbGVzX01lcmdlZCkKCiMgcGxvdApiZWZvcmUgPC0gRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAiY2VsbF9saW5lIiwgbGFiZWwgPSBUUlVFLCBsYWJlbC5ib3ggPSBUUlVFLCByZXBlbCA9IFRSVUUpCgoKCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gImNlbGxfbGluZSIsIGxhYmVsID0gVFJVRSwgbGFiZWwuYm94ID0gVFJVRSwgcmVwZWwgPSBUUlVFKQoKCgpgYGAKCgojIDQuIEhhcm1vbnktaW50ZWdyYXRpb24KYGBge3IgaW50ZWdyYXRpb24taGFybW9ueSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgojIHJ1biBIYXJtb255IC0tLS0tLS0tLS0tCkFsbF9zYW1wbGVzX01lcmdlZF9IYXJtb255X0ludGVncmF0ZWQgPC0gQWxsX3NhbXBsZXNfTWVyZ2VkICU+JQogIFJ1bkhhcm1vbnkoZ3JvdXAuYnkudmFycyA9ICdvcmlnLmlkZW50JywgcGxvdF9jb252ZXJnZW5jZSA9IEZBTFNFKQoKQWxsX3NhbXBsZXNfTWVyZ2VkX0hhcm1vbnlfSW50ZWdyYXRlZEByZWR1Y3Rpb25zCgpBbGxfc2FtcGxlc19NZXJnZWRfSGFybW9ueV9JbnRlZ3JhdGVkLmVtYmVkIDwtIEVtYmVkZGluZ3MoQWxsX3NhbXBsZXNfTWVyZ2VkX0hhcm1vbnlfSW50ZWdyYXRlZCwgImhhcm1vbnkiKQpBbGxfc2FtcGxlc19NZXJnZWRfSGFybW9ueV9JbnRlZ3JhdGVkLmVtYmVkWzE6MTAsMToxMF0KCgoKIyBEbyBVTUFQIGFuZCBjbHVzdGVyaW5nIHVzaW5nICoqIEhhcm1vbnkgZW1iZWRkaW5ncyBpbnN0ZWFkIG9mIFBDQSAqKgpBbGxfc2FtcGxlc19NZXJnZWRfSGFybW9ueV9JbnRlZ3JhdGVkIDwtIEFsbF9zYW1wbGVzX01lcmdlZF9IYXJtb255X0ludGVncmF0ZWQgJT4lCiAgIFJ1blVNQVAocmVkdWN0aW9uID0gJ2hhcm1vbnknLCBkaW1zID0gMToxMykgCiAgCgojIHZpc3VhbGl6ZSAKCgphZnRlciA8LSBEaW1QbG90KEFsbF9zYW1wbGVzX01lcmdlZF9IYXJtb255X0ludGVncmF0ZWQsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAiY2VsbF9saW5lIiwgbGFiZWwgPSBUUlVFLCBsYWJlbC5ib3ggPSBUUlVFLCByZXBlbCA9IFRSVUUpCgpiZWZvcmV8YWZ0ZXIKCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkX0hhcm1vbnlfSW50ZWdyYXRlZCxyZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gImNlbGxfbGluZSIsIGxhYmVsID0gVFJVRSwgbGFiZWwuYm94ID0gVFJVRSwgcmVwZWwgPSBUUlVFKQoKCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkX0hhcm1vbnlfSW50ZWdyYXRlZCxyZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjAuNSIsIGxhYmVsID0gVFJVRSwgbGFiZWwuYm94ID0gVFJVRSwgcmVwZWwgPSBUUlVFKQoKRGltUGxvdChBbGxfc2FtcGxlc19NZXJnZWRfSGFybW9ueV9JbnRlZ3JhdGVkLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMiIsIGxhYmVsID0gVFJVRSwgbGFiZWwuYm94ID0gVFJVRSwgcmVwZWwgPSBUUlVFKQoKYGBgCgoKIyBGZWF0dXJlUGxvdApgYGB7ciBmZWF0dXJlcGxvdC1oYXJtb255LCBmaWcuaGVpZ2h0PTEwLCBmaWcud2lkdGg9MTB9CgoKbXlmZWF0dXJlcyA8LSBjKCJDRDNFIiwgIkNENCIsICJDRDhBIiwgIkNEOEIiLCAiR05MWSIsICJNUzRBMSIsICJDRDE0IiwgIkxZWiIsICJNUzRBNyIsICJGT1hQMyIsICJUSUdJVCIsICJLSVIzREwyIiwgIkdaTUEiLCAiQ0NMMTciLCAiQ0NMNSIsICJDRDUyIiwgIkNENyIsICJDRDI2IikKCkZlYXR1cmVQbG90KEFsbF9zYW1wbGVzX01lcmdlZF9IYXJtb255X0ludGVncmF0ZWQsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZGltcyA9IDE6MiwgZmVhdHVyZXMgPSBteWZlYXR1cmVzLCBuY29sID0gNCwgb3JkZXIgPSBUKSArIE5vTGVnZW5kKCkgKyBOb0F4ZXMoKSArIE5vR3JpZCgpCgpgYGAKCgojIDUuIFNhdmUgdGhlIFNldXJhdCBvYmplY3QgYXMgYW4gUm9iaiBmaWxlCmBgYHtyIHNhdmVST0JKfQoKIyBzYXZlKEFsbF9zYW1wbGVzX01lcmdlZF9IYXJtb255X0ludGVncmF0ZWQsIGZpbGUgPSAiQWxsX3NhbXBsZXNfTWVyZ2VkX0hhcm1vbnlfSW50ZWdyYXRlZC5Sb2JqIikKCgpgYGAKCgoKCg==