2. Load Seurat Object
#Load Seurat Object merged from cell lines and a control(PBMC) after filtration
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. Data PREPARATION and Harmony Integration-1
# Create a new metadata column for grouping
All_samples_Merged$sample_group <- case_when(
grepl("^L", All_samples_Merged$cell_line) ~ "Cell_Line",
All_samples_Merged$cell_line == "PBMC" ~ "PBMC",
All_samples_Merged$cell_line == "PBMC_10x" ~ "PBMC_10x",
TRUE ~ "Other"
)
# Create the cell line grouping correctly
All_samples_Merged$cell_line_group <- case_when(
grepl("^L[1-2]", All_samples_Merged$cell_line) ~ "P1",
grepl("^L[3-4]", All_samples_Merged$cell_line) ~ "P2",
grepl("^L[5-7]", All_samples_Merged$cell_line) ~ "P3",
All_samples_Merged$cell_line == "PBMC" ~ "PBMC",
All_samples_Merged$cell_line == "PBMC_10x" ~ "PBMC_10x",
TRUE ~ "Other" # This catches any unexpected values
)
library(harmony)
All_samples_Merged <- RunHarmony(
object = All_samples_Merged,
group.by.vars = c("sample_group", "cell_line_group", "cell_line"),
dims.use = 1:22,
theta = c(2, 1, 0), # Stronger correction for broader groups
lambda = c(1, 0.8, 0.5), # Adjust as needed
plot_convergence = TRUE
)
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

Harmony Visualization-1


# Print the plots
print(p1 + p2 +p3)
DimPlot(All_samples_Merged, reduction = "umap.harmony", group.by = "sample_group", label = TRUE, label.box = TRUE) +
ggtitle("Sample Group")
DimPlot(All_samples_Merged, reduction = "umap.harmony", group.by = "cell_line_group", label = TRUE, label.box = TRUE) +
ggtitle("Cell Line Group")

DimPlot(All_samples_Merged, reduction = "umap.harmony", group.by = "cell_line", label = TRUE, label.box = TRUE) +
ggtitle("Cell Line")

DimPlot(All_samples_Merged, reduction = "umap.harmony", group.by = "predicted.celltype.l2", label = TRUE, label.box = TRUE) +
ggtitle("Annotations")

Marker Gene Visualization
# Set marker genes specific to requested immune cell types
myfeatures <- c("CD19", "CD79A", "MS4A1", # B cells
"CD14", "LYZ", "FCGR3A", # Monocytes
"CSF1R", "CD68", # Macrophages
"NKG7", "GNLY", "KIR3DL1", # NK cells
"MKI67", # Proliferating NK cells
"CD34", "KIT", # HSPCs
"CD3E", "CCR7", # T cells
"SELL", "CD45RO", # Tnaive, Tcm
"CD44", "CD45RA") # Tem, Temra
# Visualize marker genes for Harmony
FeaturePlot(All_samples_Merged, features = myfeatures, reduction = "umap.harmony", ncol = 4) +
ggtitle("Marker Gene Expression - Harmony Integration") +
NoLegend()
Avis : Could not find CD45RO in the default search locations, found in 'ADT' assay insteadAvis : Could not find CD45RA in the default search locations, found in 'ADT' assay instead

LS0tCnRpdGxlOiAiSGFybW9ueSBpbnRlZ3JhdGlvbnMgb2YgUEJNQzEweCBieSBzYW1wbGUgZ3JvdXAsIGNlbGwgbGluZSBncm91cCBhbmQgY2VsbCBsaW5lIgphdXRob3I6IE5hc2lyIE1haG1vb2QgQWJiYXNpCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OgogICNybWRmb3JtYXRzOjpyZWFkdGhlZG93bgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jX2NvbGxhcHNlZDogdHJ1ZQotLS0KCiMgMS4gbG9hZCBsaWJyYXJpZXMKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KFNldXJhdFdyYXBwZXJzKQpsaWJyYXJ5KFNldXJhdE9iamVjdCkKbGlicmFyeShTZXVyYXREYXRhKQpsaWJyYXJ5KHBhdGNod29yaykKbGlicmFyeShoYXJtb255KQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkocmV0aWN1bGF0ZSkKbGlicmFyeShBemltdXRoKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KFJ0c25lKQpsaWJyYXJ5KGhhcm1vbnkpCgpvcHRpb25zKGZ1dHVyZS5nbG9iYWxzLm1heFNpemUgPSAxZTkpCgpgYGAKCgoKCiMgMi4gTG9hZCBTZXVyYXQgT2JqZWN0IApgYGB7ciBsb2FkX3NldXJhdH0KCiNMb2FkIFNldXJhdCBPYmplY3QgbWVyZ2VkIGZyb20gY2VsbCBsaW5lcyBhbmQgYSBjb250cm9sKFBCTUMpIGFmdGVyIGZpbHRyYXRpb24KbG9hZCgiLi4vLi4vLi4vMC1JTVAtT0JKRUNUUy9BbGxfU2FtcGxlc19NZXJnZWRfd2l0aF8xMHhfQXppdG11dGhfQW5ub3RhdGVkX1NDVF9IUENfd2l0aG91dF9oYXJtb255X2ludGVncmF0aW9uLnJvYmoiKQoKQWxsX3NhbXBsZXNfTWVyZ2VkCgpgYGAKCiMgMy4gRGF0YSBQUkVQQVJBVElPTiBhbmQgSGFybW9ueSBJbnRlZ3JhdGlvbi0xCmBgYHtyIGRhdGEsIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTEyfQojIENyZWF0ZSBhIG5ldyBtZXRhZGF0YSBjb2x1bW4gZm9yIGdyb3VwaW5nCkFsbF9zYW1wbGVzX01lcmdlZCRzYW1wbGVfZ3JvdXAgPC0gY2FzZV93aGVuKAogIGdyZXBsKCJeTCIsIEFsbF9zYW1wbGVzX01lcmdlZCRjZWxsX2xpbmUpIH4gIkNlbGxfTGluZSIsCiAgQWxsX3NhbXBsZXNfTWVyZ2VkJGNlbGxfbGluZSA9PSAiUEJNQyIgfiAiUEJNQyIsCiAgQWxsX3NhbXBsZXNfTWVyZ2VkJGNlbGxfbGluZSA9PSAiUEJNQ18xMHgiIH4gIlBCTUNfMTB4IiwKICBUUlVFIH4gIk90aGVyIgopCgojIENyZWF0ZSB0aGUgY2VsbCBsaW5lIGdyb3VwaW5nIGNvcnJlY3RseQpBbGxfc2FtcGxlc19NZXJnZWQkY2VsbF9saW5lX2dyb3VwIDwtIGNhc2Vfd2hlbigKICBncmVwbCgiXkxbMS0yXSIsIEFsbF9zYW1wbGVzX01lcmdlZCRjZWxsX2xpbmUpIH4gIlAxIiwKICBncmVwbCgiXkxbMy00XSIsIEFsbF9zYW1wbGVzX01lcmdlZCRjZWxsX2xpbmUpIH4gIlAyIiwKICBncmVwbCgiXkxbNS03XSIsIEFsbF9zYW1wbGVzX01lcmdlZCRjZWxsX2xpbmUpIH4gIlAzIiwKICBBbGxfc2FtcGxlc19NZXJnZWQkY2VsbF9saW5lID09ICJQQk1DIiB+ICJQQk1DIiwKICBBbGxfc2FtcGxlc19NZXJnZWQkY2VsbF9saW5lID09ICJQQk1DXzEweCIgfiAiUEJNQ18xMHgiLAogIFRSVUUgfiAiT3RoZXIiICAjIFRoaXMgY2F0Y2hlcyBhbnkgdW5leHBlY3RlZCB2YWx1ZXMKKQoKbGlicmFyeShoYXJtb255KQoKQWxsX3NhbXBsZXNfTWVyZ2VkIDwtIFJ1bkhhcm1vbnkoCiAgb2JqZWN0ID0gQWxsX3NhbXBsZXNfTWVyZ2VkLAogIGdyb3VwLmJ5LnZhcnMgPSBjKCJzYW1wbGVfZ3JvdXAiLCAiY2VsbF9saW5lX2dyb3VwIiwgImNlbGxfbGluZSIpLAogIGRpbXMudXNlID0gMToyMiwKICB0aGV0YSA9IGMoMiwgMSwgMCksICAjIFN0cm9uZ2VyIGNvcnJlY3Rpb24gZm9yIGJyb2FkZXIgZ3JvdXBzCiAgbGFtYmRhID0gYygxLCAwLjgsIDAuNSksICAjIEFkanVzdCBhcyBuZWVkZWQKICBwbG90X2NvbnZlcmdlbmNlID0gVFJVRQopCgpgYGAKCiMjICBIYXJtb255IFZpc3VhbGl6YXRpb24tMQpgYGB7ciBoYXJtb255LXZpc3VhbGl6YXRpb24xLCBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xMn0KCiMgUnVuIFVNQVAgb24gdGhlIEhhcm1vbnktY29ycmVjdGVkIGRhdGEKQWxsX3NhbXBsZXNfTWVyZ2VkIDwtIFJ1blVNQVAoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAiaGFybW9ueSIsIGRpbXMgPSAxOjIyLCByZWR1Y3Rpb24ubmFtZSA9ICJ1bWFwLmhhcm1vbnkiKQoKIyBDcmVhdGUgY29tYmluZWQgcGxvdApsaWJyYXJ5KHBhdGNod29yaykKCnAxIDwtIERpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAidW1hcC5oYXJtb255IiwgZ3JvdXAuYnkgPSAic2FtcGxlX2dyb3VwIiwgbGFiZWwgPSBUUlVFLCBsYWJlbC5ib3ggPSBUUlVFKSArIAogIGdndGl0bGUoIlNhbXBsZSBHcm91cCIpCnAyIDwtIERpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAidW1hcC5oYXJtb255IiwgZ3JvdXAuYnkgPSAiY2VsbF9saW5lX2dyb3VwIiwgbGFiZWwgPSBUUlVFLCBsYWJlbC5ib3ggPSBUUlVFKSArIAogIGdndGl0bGUoIkNlbGwgTGluZSBHcm91cCIpCnAzIDwtIERpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAidW1hcC5oYXJtb255IiwgZ3JvdXAuYnkgPSAiY2VsbF9saW5lIiwgbGFiZWwgPSBUUlVFLCBsYWJlbC5ib3ggPSBUUlVFKSArIAogIGdndGl0bGUoIkNlbGwgTGluZSIpCgojIFByaW50IHRoZSBwbG90cwpwcmludChwMSArIHAyICtwMykKCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAidW1hcC5oYXJtb255IiwgZ3JvdXAuYnkgPSAic2FtcGxlX2dyb3VwIiwgbGFiZWwgPSBUUlVFLCBsYWJlbC5ib3ggPSBUUlVFKSArIAogIGdndGl0bGUoIlNhbXBsZSBHcm91cCIpCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAidW1hcC5oYXJtb255IiwgZ3JvdXAuYnkgPSAiY2VsbF9saW5lX2dyb3VwIiwgbGFiZWwgPSBUUlVFLCBsYWJlbC5ib3ggPSBUUlVFKSArIAogIGdndGl0bGUoIkNlbGwgTGluZSBHcm91cCIpCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAidW1hcC5oYXJtb255IiwgZ3JvdXAuYnkgPSAiY2VsbF9saW5lIiwgbGFiZWwgPSBUUlVFLCBsYWJlbC5ib3ggPSBUUlVFKSArIAogIGdndGl0bGUoIkNlbGwgTGluZSIpCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAidW1hcC5oYXJtb255IiwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwyIiwgbGFiZWwgPSBUUlVFLCBsYWJlbC5ib3ggPSBUUlVFKSArIAogIGdndGl0bGUoIkFubm90YXRpb25zIikKCmBgYAoKCgojIyAgTWFya2VyIEdlbmUgVmlzdWFsaXphdGlvbgpgYGB7ciBmZWF0dXJlcGxvdC1oYXJtb255LCBmaWcuaGVpZ2h0PTE0LCBmaWcud2lkdGg9MTh9CgoKIyBTZXQgbWFya2VyIGdlbmVzIHNwZWNpZmljIHRvIHJlcXVlc3RlZCBpbW11bmUgY2VsbCB0eXBlcwpteWZlYXR1cmVzIDwtIGMoIkNEMTkiLCAiQ0Q3OUEiLCAiTVM0QTEiLCAjIEIgY2VsbHMKICAgICAgICAgICAgICAgICJDRDE0IiwgIkxZWiIsICJGQ0dSM0EiLCAjIE1vbm9jeXRlcwogICAgICAgICAgICAgICAgIkNTRjFSIiwgIkNENjgiLCAjIE1hY3JvcGhhZ2VzCiAgICAgICAgICAgICAgICAiTktHNyIsICJHTkxZIiwgIktJUjNETDEiLCAjIE5LIGNlbGxzCiAgICAgICAgICAgICAgICAiTUtJNjciLCAjIFByb2xpZmVyYXRpbmcgTksgY2VsbHMKICAgICAgICAgICAgICAgICJDRDM0IiwgIktJVCIsICMgSFNQQ3MKICAgICAgICAgICAgICAgICJDRDNFIiwgIkNDUjciLCAjIFQgY2VsbHMKICAgICAgICAgICAgICAgICJTRUxMIiwgIkNENDVSTyIsICMgVG5haXZlLCBUY20KICAgICAgICAgICAgICAgICJDRDQ0IiwgIkNENDVSQSIpICMgVGVtLCBUZW1yYQojIFZpc3VhbGl6ZSBtYXJrZXIgZ2VuZXMgZm9yIEhhcm1vbnkKRmVhdHVyZVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCBmZWF0dXJlcyA9IG15ZmVhdHVyZXMsIHJlZHVjdGlvbiA9ICJ1bWFwLmhhcm1vbnkiLCBuY29sID0gNCkgKyAKICBnZ3RpdGxlKCJNYXJrZXIgR2VuZSBFeHByZXNzaW9uIC0gSGFybW9ueSBJbnRlZ3JhdGlvbiIpICsKICBOb0xlZ2VuZCgpCmBgYAoKIyA0LiBTYXZlIHRoZSBTZXVyYXQgb2JqZWN0IGFzIGFuIFJvYmogZmlsZQpgYGB7ciBzYXZlUk9CSn0KCnNhdmUoQWxsX3NhbXBsZXNfTWVyZ2VkLCBmaWxlID0gIi4uLy4uLy4uLzAtSU1QLU9CSkVDVFMvSGFybW9ueV9pbnRlZ3JhdGVkX0FsbF9zYW1wbGVzX01lcmdlZF93aXRoX1BCTUMxMHhfdXNpbmdfc2FtcGxlR3JvdXBfY2VsbF9saW5lX2NlbGxfbGluZUdyb3VwLlJvYmoiKQoKYGBgCgoKCgo=