# Load CITE-seq H5 file
male_list <- Read10X_h5(
"Normal_PBMC_Samples-23-02-2026/10x_sample1_Same_PBMC_10x_incudingCITESEQ_TCR_Male27/sc5p_v2_hs_PBMC_10k_multi_5gex_5fb_b_t_count_filtered_feature_bc_matrix.h5",
use.names = TRUE
)
names(male_list)
[1] "Gene Expression" "Antibody Capture"
cd4t_s1 <- CreateSeuratObject(
counts = male_list[["Gene Expression"]],
project = "CD4T_10x_S1",
min.cells = 3, min.features = 200
)
adt_counts <- male_list[["Antibody Capture"]][, colnames(cd4t_s1)]
rownames(adt_counts) <- gsub("_", "-", rownames(adt_counts))
cd4t_s1[["ADT"]] <- CreateAssay5Object(counts = adt_counts)
cd4t_s1$dataset <- "CD4T_10x_S1"
cd4t_s1
An object of class Seurat
20245 features across 10529 samples within 2 assays
Active assay: RNA (20226 features, 0 variable features)
1 layer present: counts
1 other assay present: ADT
female_data <- Read10X_h5(
"Normal_PBMC_Samples-23-02-2026/10x_sample2_TCR_available_Female25-30/10k_PBMC_5pv2_nextgem_Chromium_X_intron_10k_PBMC_5pv2_nextgem_Chromium_X_intron_count_sample_feature_bc_matrix.h5",
use.names = TRUE
)
counts_matrix <- if(is.list(female_data) && length(female_data)>0) female_data[[1]] else female_data
cd4t_s2 <- CreateSeuratObject(
counts = counts_matrix,
project = "CD4T_10x_S2",
min.cells = 3, min.features = 200
)
cd4t_s2$dataset <- "CD4T_10x_S2"
cd4t_s2
An object of class Seurat
23144 features across 9731 samples within 1 assay
Active assay: RNA (23144 features, 0 variable features)
1 layer present: counts
All_samples_Merged <- readRDS(
"/home/bioinfo/1-Thesis_Final_Year_2025/2025-Year3_Analysis/1-scRNA_RESULTS-19-11-2025/0-Seurat_RDS_Final_OBJECT/All_samples_Merged_with_Renamed_Clusters_final-26-10-2025.rds"
)
cd4t_lab <- subset(All_samples_Merged, subset = orig.ident == "CD4T_lab")
cd4t_lab$dataset <- "CD4T_lab"
DefaultAssay(cd4t_lab) <- "RNA"
cd4t_lab
An object of class Seurat
62900 features across 5106 samples within 6 assays
Active assay: RNA (36601 features, 0 variable features)
2 layers present: data, counts
5 other assays present: ADT, prediction.score.celltype.l1, prediction.score.celltype.l2, prediction.score.celltype.l3, SCT
5 dimensional reductions calculated: integrated_dr, ref.umap, pca, umap, harmony
compute_qc <- function(obj) {
DefaultAssay(obj) <- "RNA"
obj[["percent.mt"]] <- PercentageFeatureSet(obj, pattern = "^MT-")
obj$percent.mt <- replace(as.numeric(obj$percent.mt), is.na(obj$percent.mt), 0)
obj
}
cd4t_s1 <- compute_qc(cd4t_s1)
cd4t_s2 <- compute_qc(cd4t_s2)
cd4t_lab <- compute_qc(cd4t_lab)
pre_qc <- merge(cd4t_s1, y = list(cd4t_s2, cd4t_lab))
VlnPlot(pre_qc, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"),
group.by = "dataset", pt.size = 0, ncol = 3)
p1 <- FeatureScatter(pre_qc, "nCount_RNA", "nFeature_RNA", group.by = "dataset")
p2 <- FeatureScatter(pre_qc, "nCount_RNA", "percent.mt", group.by = "dataset")
p3 <- FeatureScatter(pre_qc, "nFeature_RNA", "percent.mt", group.by = "dataset")
p1 | p2 | p3
# Your Sezary Syndrome filtering (exact)
your_filter <- function(obj) {
subset(obj, subset =
nFeature_RNA > 500 & nFeature_RNA < 7000 &
nCount_RNA < 40000 & percent.mt < 7.5 & percent.mt > 0.1
)
}
cd4t_s1 <- your_filter(cd4t_s1)
cd4t_s2 <- your_filter(cd4t_s2)
cd4t_lab <- your_filter(cd4t_lab)
cat("=== CELLS AFTER YOUR FILTERING ===\n")
=== CELLS AFTER YOUR FILTERING ===
cat("CD4T_10x_S1:", ncol(cd4t_s1), "\n")
CD4T_10x_S1: 9867
cat("CD4T_10x_S2:", ncol(cd4t_s2), "\n")
CD4T_10x_S2: 6861
cat("CD4T_lab: ", ncol(cd4t_lab), "\n")
CD4T_lab: 5106
cat("=== COMPLETE NORMALIZATION (S1/S2/Lab + Dummy ADT) ===\n")
=== COMPLETE NORMALIZATION (S1/S2/Lab + Dummy ADT) ===
# 1. RNA Normalization (ALL 3 samples)
cd4t_s1 <- NormalizeData(cd4t_s1, verbose = FALSE); cat("✅ RNA S1\n")
✅ RNA S1
cd4t_s2 <- NormalizeData(cd4t_s2, verbose = FALSE); cat("✅ RNA S2\n")
✅ RNA S2
cd4t_lab <- NormalizeData(cd4t_lab, verbose = FALSE); cat("✅ RNA Lab\n")
✅ RNA Lab
# 2. Universal ADT Normalization (Real + Dummy)
normalize_all_adt <- function() {
for(sample_name in c("cd4t_s1", "cd4t_s2", "cd4t_lab")) {
obj <- get(sample_name)
# All now have ADT (real or dummy) ✓
if("ADT" %in% names(obj@assays)) {
cat("ADT normalizing:", sample_name, "\n")
DefaultAssay(obj) <- "ADT"
obj <- NormalizeData(obj, normalization.method = "CLR", margin = 2, verbose = FALSE)
cat(" →", sample_name, "ADT CLR ✓\n")
}
# Always reset to RNA
DefaultAssay(obj) <- "RNA"
assign(sample_name, obj, envir = .GlobalEnv)
}
}
normalize_all_adt()
ADT normalizing: cd4t_s1
→ cd4t_s1 ADT CLR ✓
ADT normalizing: cd4t_lab
→ cd4t_lab ADT CLR ✓
cat("\n🎯 ALL NORMALIZED → READY FOR HARMONY!\n")
🎯 ALL NORMALIZED → READY FOR HARMONY!
# Quick verification
cat("\nActive assays:\n")
Active assays:
cat("S1: ", DefaultAssay(cd4t_s1), "\n")
S1: RNA
cat("S2: ", DefaultAssay(cd4t_s2), "\n")
S2: RNA
cat("Lab:", DefaultAssay(cd4t_lab), "\n")
Lab: RNA
# ✅ 1. Seurat v5 global option (safe)
options(Seurat.object.assay.version = "v5")
# ✅ 2. Universal V5 converter (production-ready)
convert_to_v5 <- function(obj, assay_name = "ADT") {
if(assay_name %in% names(obj@assays)) {
# Convert legacy Assay → Assay5
if(!inherits(obj[[assay_name]], "Assay5")) {
cat("Converting", assay_name, "to v5...\n")
old_assay <- obj[[assay_name]]
new_assay <- CreateAssay5Object(counts = old_assay@counts)
obj[[assay_name]] <- new_assay
}
} else {
# Add dummy ADT if missing (V5 standard)
cat("Adding dummy ADT (v5)...\n")
dummy <- Matrix::Matrix(0, nrow = 28, ncol = ncol(obj),
dimnames = list(paste0("Dummy_ADT_", 1:28),
colnames(obj)))
obj[["ADT"]] <- CreateAssay5Object(counts = dummy)
}
return(obj)
}
# ✅ 3. Convert ALL samples
cd4t_s1 <- convert_to_v5(cd4t_s1); cat("S1 ✓\n")
S1 ✓
cd4t_s2 <- convert_to_v5(cd4t_s2); cat("S2 ✓\n") # Gets dummy
Adding dummy ADT (v5)...
S2 ✓
cd4t_lab <- convert_to_v5(cd4t_lab); cat("Lab ✓\n")
Converting ADT to v5...
Lab ✓
cat("\n✅ ALL OBJECTS NOW SEURAT V5!\n")
✅ ALL OBJECTS NOW SEURAT V5!
# Seurat v5 LayerData (universal access)
for(name in c("cd4t_s1", "cd4t_s2", "cd4t_lab")) {
obj <- get(name)
adt_counts <- LayerData(obj[["ADT"]], layer = "counts")
cat("\n", name, "- ADT:", nrow(adt_counts), "×", ncol(adt_counts), "\n")
total <- sum(adt_counts)
cat(" Sum:", total, ifelse(total==0, "DUMMY ✓", "REAL ✓"), "\n")
}
cd4t_s1 - ADT: 19 × 9867
Sum: 27462748 REAL ✓
cd4t_s2 - ADT: 28 × 6861
Sum: 0 DUMMY ✓
cd4t_lab - ADT: 28 × 5106
Sum: 6401555 REAL ✓
# FIXED: Proper object names + cell IDs
healthy <- merge(cd4t_s1, y = list(cd4t_s2, cd4t_lab),
add.cell.ids = c("CD4T_10x_S1", "CD4T_10x_S2", "CD4T_lab"),
merge.data = FALSE)
DefaultAssay(healthy) <- "RNA"
# Preprocessing
healthy <- FindVariableFeatures(healthy, nfeatures = 3000)
Calculating gene variances
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
healthy <- ScaleData(healthy, vars.to.regress = "percent.mt")
|
| | 0%
|
|= | 0%
|
|= | 1%
|
|== | 1%
|
|== | 2%
|
|=== | 2%
|
|=== | 3%
|
|==== | 3%
|
|==== | 4%
|
|===== | 4%
|
|===== | 5%
|
|====== | 5%
|
|======= | 5%
|
|======= | 6%
|
|======== | 6%
|
|======== | 7%
|
|========= | 7%
|
|========= | 8%
|
|========== | 8%
|
|========== | 9%
|
|=========== | 9%
|
|=========== | 10%
|
|============ | 10%
|
|============= | 11%
|
|============== | 11%
|
|============== | 12%
|
|=============== | 12%
|
|=============== | 13%
|
|================ | 13%
|
|================ | 14%
|
|================= | 14%
|
|================= | 15%
|
|================== | 15%
|
|================== | 16%
|
|=================== | 16%
|
|==================== | 16%
|
|==================== | 17%
|
|===================== | 17%
|
|===================== | 18%
|
|====================== | 18%
|
|====================== | 19%
|
|======================= | 19%
|
|======================= | 20%
|
|======================== | 20%
|
|======================== | 21%
|
|========================= | 21%
|
|========================== | 21%
|
|========================== | 22%
|
|=========================== | 22%
|
|=========================== | 23%
|
|============================ | 23%
|
|============================ | 24%
|
|============================= | 24%
|
|============================= | 25%
|
|============================== | 25%
|
|============================== | 26%
|
|=============================== | 26%
|
|================================ | 26%
|
|================================ | 27%
|
|================================= | 27%
|
|================================= | 28%
|
|================================== | 28%
|
|================================== | 29%
|
|=================================== | 29%
|
|=================================== | 30%
|
|==================================== | 30%
|
|==================================== | 31%
|
|===================================== | 31%
|
|===================================== | 32%
|
|====================================== | 32%
|
|======================================= | 32%
|
|======================================= | 33%
|
|======================================== | 33%
|
|======================================== | 34%
|
|========================================= | 34%
|
|========================================= | 35%
|
|========================================== | 35%
|
|========================================== | 36%
|
|=========================================== | 36%
|
|=========================================== | 37%
|
|============================================ | 37%
|
|============================================= | 37%
|
|============================================= | 38%
|
|============================================== | 38%
|
|============================================== | 39%
|
|=============================================== | 39%
|
|=============================================== | 40%
|
|================================================ | 40%
|
|================================================ | 41%
|
|================================================= | 41%
|
|================================================= | 42%
|
|================================================== | 42%
|
|=================================================== | 42%
|
|=================================================== | 43%
|
|==================================================== | 43%
|
|==================================================== | 44%
|
|===================================================== | 44%
|
|===================================================== | 45%
|
|====================================================== | 45%
|
|====================================================== | 46%
|
|======================================================= | 46%
|
|======================================================= | 47%
|
|======================================================== | 47%
|
|========================================================= | 48%
|
|========================================================== | 48%
|
|========================================================== | 49%
|
|=========================================================== | 49%
|
|=========================================================== | 50%
|
|============================================================ | 50%
|
|============================================================ | 51%
|
|============================================================= | 51%
|
|============================================================= | 52%
|
|============================================================== | 52%
|
|=============================================================== | 53%
|
|================================================================ | 53%
|
|================================================================ | 54%
|
|================================================================= | 54%
|
|================================================================= | 55%
|
|================================================================== | 55%
|
|================================================================== | 56%
|
|=================================================================== | 56%
|
|=================================================================== | 57%
|
|==================================================================== | 57%
|
|==================================================================== | 58%
|
|===================================================================== | 58%
|
|====================================================================== | 58%
|
|====================================================================== | 59%
|
|======================================================================= | 59%
|
|======================================================================= | 60%
|
|======================================================================== | 60%
|
|======================================================================== | 61%
|
|========================================================================= | 61%
|
|========================================================================= | 62%
|
|========================================================================== | 62%
|
|========================================================================== | 63%
|
|=========================================================================== | 63%
|
|============================================================================ | 63%
|
|============================================================================ | 64%
|
|============================================================================= | 64%
|
|============================================================================= | 65%
|
|============================================================================== | 65%
|
|============================================================================== | 66%
|
|=============================================================================== | 66%
|
|=============================================================================== | 67%
|
|================================================================================ | 67%
|
|================================================================================ | 68%
|
|================================================================================= | 68%
|
|================================================================================== | 68%
|
|================================================================================== | 69%
|
|=================================================================================== | 69%
|
|=================================================================================== | 70%
|
|==================================================================================== | 70%
|
|==================================================================================== | 71%
|
|===================================================================================== | 71%
|
|===================================================================================== | 72%
|
|====================================================================================== | 72%
|
|====================================================================================== | 73%
|
|======================================================================================= | 73%
|
|======================================================================================= | 74%
|
|======================================================================================== | 74%
|
|========================================================================================= | 74%
|
|========================================================================================= | 75%
|
|========================================================================================== | 75%
|
|========================================================================================== | 76%
|
|=========================================================================================== | 76%
|
|=========================================================================================== | 77%
|
|============================================================================================ | 77%
|
|============================================================================================ | 78%
|
|============================================================================================= | 78%
|
|============================================================================================= | 79%
|
|============================================================================================== | 79%
|
|=============================================================================================== | 79%
|
|=============================================================================================== | 80%
|
|================================================================================================ | 80%
|
|================================================================================================ | 81%
|
|================================================================================================= | 81%
|
|================================================================================================= | 82%
|
|================================================================================================== | 82%
|
|================================================================================================== | 83%
|
|=================================================================================================== | 83%
|
|=================================================================================================== | 84%
|
|==================================================================================================== | 84%
|
|===================================================================================================== | 84%
|
|===================================================================================================== | 85%
|
|====================================================================================================== | 85%
|
|====================================================================================================== | 86%
|
|======================================================================================================= | 86%
|
|======================================================================================================= | 87%
|
|======================================================================================================== | 87%
|
|======================================================================================================== | 88%
|
|========================================================================================================= | 88%
|
|========================================================================================================= | 89%
|
|========================================================================================================== | 89%
|
|=========================================================================================================== | 90%
|
|============================================================================================================ | 90%
|
|============================================================================================================ | 91%
|
|============================================================================================================= | 91%
|
|============================================================================================================= | 92%
|
|============================================================================================================== | 92%
|
|============================================================================================================== | 93%
|
|=============================================================================================================== | 93%
|
|=============================================================================================================== | 94%
|
|================================================================================================================ | 94%
|
|================================================================================================================ | 95%
|
|================================================================================================================= | 95%
|
|================================================================================================================== | 95%
|
|================================================================================================================== | 96%
|
|=================================================================================================================== | 96%
|
|=================================================================================================================== | 97%
|
|==================================================================================================================== | 97%
|
|==================================================================================================================== | 98%
|
|===================================================================================================================== | 98%
|
|===================================================================================================================== | 99%
|
|====================================================================================================================== | 99%
|
|====================================================================================================================== | 100%
|
|=======================================================================================================================| 100%
|
| | 0%
|
|======================================== | 33%
|
|=============================================================================== | 67%
|
|=======================================================================================================================| 100%
healthy <- RunPCA(healthy, npcs = 50)
ElbowPlot(healthy, ndims = 50)
library(ggplot2)
library(RColorBrewer)
# Assuming you have 10 different cell lines, generating a color palette with 10 colors
cell_line_colors <- brewer.pal(10, "Set3")
# Assuming All_samples_Merged$cell_line is a factor or character vector containing cell line names
data <- as.data.frame(table(healthy$dataset))
colnames(data) <- c("cell_line", "nUMI") # Change column name to nUMI
ncells <- ggplot(data, aes(x = cell_line, y = nUMI, fill = cell_line)) +
geom_col() +
theme_classic() +
geom_text(aes(label = nUMI),
position = position_dodge(width = 0.9),
vjust = -0.25) +
scale_fill_manual(values = cell_line_colors) +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(hjust = 0.5)) + # Adjust the title position
ggtitle("Filtered cells per sample") +
xlab("PBMC samples") + # Adjust x-axis label
ylab("Frequency") # Adjust y-axis label
print(ncells)
# TEST-1
# given that the output of RunPCA is "pca"
# replace "so" by the name of your seurat object
pct <- All_samples_Merged[["pca"]]@stdev / sum(All_samples_Merged[["pca"]]@stdev) * 100
cumu <- cumsum(pct) # Calculate cumulative percents for each PC
# Determine the difference between variation of PC and subsequent PC
co2 <- sort(which((pct[-length(pct)] - pct[-1]) > 0.1), decreasing = T)[1] + 1
# last point where change of % of variation is more than 0.1%. -> co2
co2
[1] 15
# TEST-2
# get significant PCs
stdv <- All_samples_Merged[["pca"]]@stdev
sum.stdv <- sum(All_samples_Merged[["pca"]]@stdev)
percent.stdv <- (stdv / sum.stdv) * 100
cumulative <- cumsum(percent.stdv)
co1 <- which(cumulative > 90 & percent.stdv < 5)[1]
co2 <- sort(which((percent.stdv[1:length(percent.stdv) - 1] -
percent.stdv[2:length(percent.stdv)]) > 0.1),
decreasing = T)[1] + 1
min.pc <- min(co1, co2)
min.pc
[1] 15
# Create a dataframe with values
plot_df <- data.frame(pct = percent.stdv,
cumu = cumulative,
rank = 1:length(percent.stdv))
# Elbow plot to visualize
ggplot(plot_df, aes(cumulative, percent.stdv, label = rank, color = rank > min.pc)) +
geom_text() +
geom_vline(xintercept = 90, color = "grey") +
geom_hline(yintercept = min(percent.stdv[percent.stdv > 5]), color = "grey") +
theme_bw()
## Merge (preserves all normalization)
healthy <- merge(cd4t_s1, y = list(cd4t_s2, cd4t_lab),
add.cell.ids = c("CD4T_10x_S1", "CD4T_10x_S2", "CD4T_lab"),
merge.data = FALSE)
# ✅ V5 REQUIRED: Join layers post-merge
healthy <- JoinLayers(healthy)
DefaultAssay(healthy) <- "RNA"
cat("Layers joined:", length(healthy@assays$RNA@layers), "→ 1 ✓\n")
Layers joined: 2 → 1 ✓
## Joint preprocessing (variable features across batches)
healthy <- FindVariableFeatures(healthy, nfeatures = 3000)
Calculating gene variances
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
healthy <- ScaleData(healthy, vars.to.regress = "percent.mt")
|
| | 0%
|
|= | 0%
|
|= | 1%
|
|== | 1%
|
|== | 2%
|
|=== | 2%
|
|=== | 3%
|
|==== | 3%
|
|==== | 4%
|
|===== | 4%
|
|===== | 5%
|
|====== | 5%
|
|======= | 5%
|
|======= | 6%
|
|======== | 6%
|
|======== | 7%
|
|========= | 7%
|
|========= | 8%
|
|========== | 8%
|
|========== | 9%
|
|=========== | 9%
|
|=========== | 10%
|
|============ | 10%
|
|============= | 11%
|
|============== | 11%
|
|============== | 12%
|
|=============== | 12%
|
|=============== | 13%
|
|================ | 13%
|
|================ | 14%
|
|================= | 14%
|
|================= | 15%
|
|================== | 15%
|
|================== | 16%
|
|=================== | 16%
|
|==================== | 16%
|
|==================== | 17%
|
|===================== | 17%
|
|===================== | 18%
|
|====================== | 18%
|
|====================== | 19%
|
|======================= | 19%
|
|======================= | 20%
|
|======================== | 20%
|
|======================== | 21%
|
|========================= | 21%
|
|========================== | 21%
|
|========================== | 22%
|
|=========================== | 22%
|
|=========================== | 23%
|
|============================ | 23%
|
|============================ | 24%
|
|============================= | 24%
|
|============================= | 25%
|
|============================== | 25%
|
|============================== | 26%
|
|=============================== | 26%
|
|================================ | 26%
|
|================================ | 27%
|
|================================= | 27%
|
|================================= | 28%
|
|================================== | 28%
|
|================================== | 29%
|
|=================================== | 29%
|
|=================================== | 30%
|
|==================================== | 30%
|
|==================================== | 31%
|
|===================================== | 31%
|
|===================================== | 32%
|
|====================================== | 32%
|
|======================================= | 32%
|
|======================================= | 33%
|
|======================================== | 33%
|
|======================================== | 34%
|
|========================================= | 34%
|
|========================================= | 35%
|
|========================================== | 35%
|
|========================================== | 36%
|
|=========================================== | 36%
|
|=========================================== | 37%
|
|============================================ | 37%
|
|============================================= | 37%
|
|============================================= | 38%
|
|============================================== | 38%
|
|============================================== | 39%
|
|=============================================== | 39%
|
|=============================================== | 40%
|
|================================================ | 40%
|
|================================================ | 41%
|
|================================================= | 41%
|
|================================================= | 42%
|
|================================================== | 42%
|
|=================================================== | 42%
|
|=================================================== | 43%
|
|==================================================== | 43%
|
|==================================================== | 44%
|
|===================================================== | 44%
|
|===================================================== | 45%
|
|====================================================== | 45%
|
|====================================================== | 46%
|
|======================================================= | 46%
|
|======================================================= | 47%
|
|======================================================== | 47%
|
|========================================================= | 48%
|
|========================================================== | 48%
|
|========================================================== | 49%
|
|=========================================================== | 49%
|
|=========================================================== | 50%
|
|============================================================ | 50%
|
|============================================================ | 51%
|
|============================================================= | 51%
|
|============================================================= | 52%
|
|============================================================== | 52%
|
|=============================================================== | 53%
|
|================================================================ | 53%
|
|================================================================ | 54%
|
|================================================================= | 54%
|
|================================================================= | 55%
|
|================================================================== | 55%
|
|================================================================== | 56%
|
|=================================================================== | 56%
|
|=================================================================== | 57%
|
|==================================================================== | 57%
|
|==================================================================== | 58%
|
|===================================================================== | 58%
|
|====================================================================== | 58%
|
|====================================================================== | 59%
|
|======================================================================= | 59%
|
|======================================================================= | 60%
|
|======================================================================== | 60%
|
|======================================================================== | 61%
|
|========================================================================= | 61%
|
|========================================================================= | 62%
|
|========================================================================== | 62%
|
|========================================================================== | 63%
|
|=========================================================================== | 63%
|
|============================================================================ | 63%
|
|============================================================================ | 64%
|
|============================================================================= | 64%
|
|============================================================================= | 65%
|
|============================================================================== | 65%
|
|============================================================================== | 66%
|
|=============================================================================== | 66%
|
|=============================================================================== | 67%
|
|================================================================================ | 67%
|
|================================================================================ | 68%
|
|================================================================================= | 68%
|
|================================================================================== | 68%
|
|================================================================================== | 69%
|
|=================================================================================== | 69%
|
|=================================================================================== | 70%
|
|==================================================================================== | 70%
|
|==================================================================================== | 71%
|
|===================================================================================== | 71%
|
|===================================================================================== | 72%
|
|====================================================================================== | 72%
|
|====================================================================================== | 73%
|
|======================================================================================= | 73%
|
|======================================================================================= | 74%
|
|======================================================================================== | 74%
|
|========================================================================================= | 74%
|
|========================================================================================= | 75%
|
|========================================================================================== | 75%
|
|========================================================================================== | 76%
|
|=========================================================================================== | 76%
|
|=========================================================================================== | 77%
|
|============================================================================================ | 77%
|
|============================================================================================ | 78%
|
|============================================================================================= | 78%
|
|============================================================================================= | 79%
|
|============================================================================================== | 79%
|
|=============================================================================================== | 79%
|
|=============================================================================================== | 80%
|
|================================================================================================ | 80%
|
|================================================================================================ | 81%
|
|================================================================================================= | 81%
|
|================================================================================================= | 82%
|
|================================================================================================== | 82%
|
|================================================================================================== | 83%
|
|=================================================================================================== | 83%
|
|=================================================================================================== | 84%
|
|==================================================================================================== | 84%
|
|===================================================================================================== | 84%
|
|===================================================================================================== | 85%
|
|====================================================================================================== | 85%
|
|====================================================================================================== | 86%
|
|======================================================================================================= | 86%
|
|======================================================================================================= | 87%
|
|======================================================================================================== | 87%
|
|======================================================================================================== | 88%
|
|========================================================================================================= | 88%
|
|========================================================================================================= | 89%
|
|========================================================================================================== | 89%
|
|=========================================================================================================== | 90%
|
|============================================================================================================ | 90%
|
|============================================================================================================ | 91%
|
|============================================================================================================= | 91%
|
|============================================================================================================= | 92%
|
|============================================================================================================== | 92%
|
|============================================================================================================== | 93%
|
|=============================================================================================================== | 93%
|
|=============================================================================================================== | 94%
|
|================================================================================================================ | 94%
|
|================================================================================================================ | 95%
|
|================================================================================================================= | 95%
|
|================================================================================================================== | 95%
|
|================================================================================================================== | 96%
|
|=================================================================================================================== | 96%
|
|=================================================================================================================== | 97%
|
|==================================================================================================================== | 97%
|
|==================================================================================================================== | 98%
|
|===================================================================================================================== | 98%
|
|===================================================================================================================== | 99%
|
|====================================================================================================================== | 99%
|
|====================================================================================================================== | 100%
|
|=======================================================================================================================| 100%
|
| | 0%
|
|======================================== | 33%
|
|=============================================================================== | 67%
|
|=======================================================================================================================| 100%
healthy <- RunPCA(healthy, npcs = 50)
ElbowPlot(healthy, ndims = 50)
## Harmony (YOUR PC analysis = 1:20)
healthy <- RunHarmony(healthy,
group.by.vars = "dataset",
dims.use = 1:20, # Your TEST1/2 + elbow safety
max_iter = 20,
plot_convergence = TRUE)
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
## UMAP + Clustering
healthy <- RunUMAP(healthy, reduction = "harmony", dims = 1:20)
Using method 'umap'
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
healthy <- FindNeighbors(healthy, reduction = "harmony", dims = 1:20)
healthy <- FindClusters(healthy, resolution = c(0.3, 0.5, 0.8))
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 21834
Number of edges: 745395
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9304
Number of communities: 17
Elapsed time: 3 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 21834
Number of edges: 745395
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9018
Number of communities: 20
Elapsed time: 2 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 21834
Number of edges: 745395
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8668
Number of communities: 21
Elapsed time: 2 seconds
# Batch mixing check
# Batch mixing validation (CORRECTED)
p1 <- DimPlot(healthy, group.by = "dataset", label = FALSE) +
ggtitle("Harmony Batch Correction")
p2 <- DimPlot(healthy, group.by = "seurat_clusters", label = TRUE) + # No resolution here
ggtitle("Clusters (current res)")
p3 <- DimPlot(healthy, group.by = "predicted.celltype.l1", label = TRUE) + # No resolution here
ggtitle("Azimuth")
p4 <- DimPlot(healthy, group.by = "predicted.celltype.l2", label = TRUE) + # No resolution here
ggtitle("Azimuth")
p5 <- DimPlot(healthy, group.by = "predicted.celltype.l3", label = TRUE) + # No resolution here
ggtitle("Azimuth")
p1 | p2 | p3 | p4 | p5
# Save intermediate checkpoint
saveRDS(healthy, "healthy_pre_azimuth.rds")
# Re-run safe anytime
healthy <- readRDS("healthy_pre_azimuth.rds")
options(future.globals.maxSize = 1e9)
library(SeuratData)
DefaultAssay(healthy) <- "RNA"
healthy <- RunAzimuth(healthy, reference = "pbmcref")
DimPlot(healthy, group.by = "predicted.celltype.l1", label = TRUE,
repel = TRUE, ncol = 2, label.size = 3) + NoLegend() +
ggtitle("Azimuth Cell Types")
DimPlot(healthy, group.by = "predicted.celltype.l2", label = TRUE,
repel = TRUE, ncol = 2, label.size = 3) + NoLegend() +
ggtitle("Azimuth Cell Types")
DimPlot(healthy, group.by = "predicted.celltype.l3", label = TRUE,
repel = TRUE, ncol = 2, label.size = 3) + NoLegend() +
ggtitle("Azimuth Cell Types")
# Cell type table
table(healthy$predicted.celltype, healthy$dataset)
# make sure you are on Seurat >= 5
DefaultAssay(ctrl) <- "RNA"
# merge all RNA layers into one
ctrl <- JoinLayers(ctrl, assay = "RNA")
# now convert to SCE
sce <- as.SingleCellExperiment(ctrl, assay = "RNA")
immune = celldex::DatabaseImmuneCellExpressionData()
singler.immune <- SingleR(test = sce, ref = immune, assay.type.test=1,
labels = immune$label.fine)
head(singler.immune)
hpca <- celldex::HumanPrimaryCellAtlasData()
singler.hpca <- SingleR(test = sce, ref = hpca, assay.type.test=1,
labels = hpca$label.fine)
head(singler.hpca)
DimPlot(ctrl, group.by = c("singler.hpca", "singler.immune"), ncol = 2, label = T, label.box = T, repel = T)
```