First, I’m loading the required libraries & functions
suppressPackageStartupMessages(library(Seurat, lib.loc = "/software/Seuratv4/lib/")) # Seurat v4.4.0, library for single-cell analysis
suppressPackageStartupMessages(library(SeuratObject, lib.loc = "/software/Seuratv4/lib/")) # For compatibility purpose
suppressPackageStartupMessages(library(data.table)) # For writing DE gene file
suppressPackageStartupMessages(library(readxl)) # For writing DE gene file
suppressPackageStartupMessages(library(loomR)) # For building a file for ASAP
suppressPackageStartupMessages(library(Matrix)) # For building a file for ASAP
suppressPackageStartupMessages(library(ggplot2)) # For plotting
suppressPackageStartupMessages(library(ggpubr)) # For grid plotting
suppressPackageStartupMessages(library(plotly)) # For interactive plots
suppressPackageStartupMessages(library(crayon)) # Just for bolding the console output :D
cat(bold("Seurat"), "version", as.character(packageVersion("Seurat")), "\n")
## Seurat version 4.4.0
cat(bold("SeuratObject"), "version", as.character(packageVersion("SeuratObject")), "\n")
## SeuratObject version 4.1.4
cat(bold("data.table"), "version", as.character(packageVersion("data.table")), "\n")
## data.table version 1.16.4
cat(bold("readxl"), "version", as.character(packageVersion("readxl")), "\n")
## readxl version 1.4.3
cat(bold("loomR"), "version", as.character(packageVersion("loomR")), "\n")
## loomR version 0.2.0
cat(bold("Matrix"), "version", as.character(packageVersion("Matrix")), "\n")
## Matrix version 1.6.5
cat(bold("ggplot2"), "version", as.character(packageVersion("ggplot2")), "\n")
## ggplot2 version 3.5.1
cat(bold("ggpubr"), "version", as.character(packageVersion("ggpubr")), "\n")
## ggpubr version 0.6.0
cat(bold("plotly"), "version", as.character(packageVersion("plotly")), "\n")
## plotly version 4.10.4
# Random seed
set.seed(42)
Paper: Unravelling cell type-specific responses to Parkinson’s Disease at single cell resolution Martirosyan et al. Mol Neurodegeneration 19, 7 (2024) https://molecularneurodegeneration.biomedcentral.com/articles/10.1186/s13024-023-00699-0
Data repo: https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE243639
Loom file: NA
## Parameters
input_matrix <- "./data/Martirosyan_2024/GSE243639_Filtered_count_table.csv.gz"
input_metadata <- "./data/Martirosyan_2024/GSE243639_UMAP_coordinates.xlsx"
input_Oxphos_135_AUCell_values_path <- "./data/Martirosyan_135_Oxphos_AUCell_auc.tsv"
input_UPR_93_AUCell_values_path <- "./data/Martirosyan_93_UPR_AUCell_auc.tsv"
output_figure_prefix <- "./figures/Figure_5A/"
# Build a Seurat object with this data
data.seurat <- CreateSeuratObject(data.matrix, project = "Martirosyan")
# Restore hyphens in cell barcodes
data.seurat <- RenameCells(data.seurat, new.names = gsub(pattern = ".1$", replacement = "-1", x = colnames(data.seurat)))
# Change identity
data.seurat$orig.ident.parsed <- data.seurat$orig.ident
data.seurat$orig.ident <- "Martirosyan"
data.seurat <- SetIdent(data.seurat, value = "orig.ident")
# Add MT content
data.seurat[["percent.mt"]] <- PercentageFeatureSet(data.seurat, pattern = "^MT-")
# Run default Normalization
data.seurat <- NormalizeData(data.seurat, normalization.method = "LogNormalize", scale.factor = 10000)
# Visualize QC metrics as a violin plot
VlnPlot(data.seurat, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)
data.auc.oxphos <- fread(input_Oxphos_135_AUCell_values_path, data.table = F, check.names = F)
rownames(data.auc.oxphos) <- data.auc.oxphos$Cell
data.auc.oxphos
data.auc.upr <- fread(input_UPR_93_AUCell_values_path, data.table = F, check.names = F)
rownames(data.auc.upr) <- data.auc.upr$Cell
data.auc.upr
# Add metadata
data.seurat$AUC_OXPHOS_135_KEGG <- data.auc.oxphos[colnames(data.seurat), "AUC"]
data.seurat$AUC_UPR_93_REACTOME <- data.auc.upr[colnames(data.seurat), "AUC"]
data.seurat$CLUSTER <- data.metadata[colnames(data.seurat), "CLUSTER"]
data.seurat$IDENT <- data.metadata[colnames(data.seurat), "IDENT"]
# Add UMAP
data.seurat[["UMAP"]] <- CreateDimReducObject(embeddings = as.matrix(data.metadata[,c("UMAP_1", "UMAP_2")]), key = "UMAP_", assay = "RNA")
hist(data.seurat$AUC_OXPHOS_135_KEGG, breaks = 100)
boxplot_data <- data.seurat@meta.data
# Filter out <5 cells per annotation
boxplot_data <- boxplot_data[boxplot_data$IDENT %in% names(which(table(boxplot_data$IDENT) >= 5)),]
# Calculating median values of "AUC_OXPHOS_135_KEGG" for each group
median_values <- tapply(boxplot_data$AUC_OXPHOS_135_KEGG, boxplot_data$IDENT, median)
# Sorting the metadata based on median values
boxplot_data$IDENT <- factor(boxplot_data$IDENT, levels = names(sort(median_values, decreasing = F)))
# Plot
p <- ggplot(boxplot_data, aes(x = IDENT, y = AUC_OXPHOS_135_KEGG, fill = IDENT)) +
geom_boxplot() +
labs(x = NULL, y = "AUC_OXPHOS_135_KEGG") +
theme_minimal() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
NoLegend()
p
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_135_Oxphos_AUCell_ordered_boxplot_IDENT.pdf"), width = 5, height = 5, bg = "white")
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_135_Oxphos_AUCell_ordered_boxplot_IDENT.png"), width = 5, height = 5, dpi = 1000, bg = 'white')
FeaturePlot(data.seurat, reduction = "UMAP", features = "AUC_OXPHOS_135_KEGG")
hist(data.seurat$AUC_UPR_93_REACTOME, breaks = 100)
boxplot_data <- data.seurat@meta.data
# Filter out <5 cells per annotation
boxplot_data <- boxplot_data[boxplot_data$IDENT %in% names(which(table(boxplot_data$IDENT) >= 5)),]
# Calculating median values of "AUC_UPR_93_REACTOME" for each group
median_values <- tapply(boxplot_data$AUC_UPR_93_REACTOME, boxplot_data$IDENT, median)
# Sorting the metadata based on median values
boxplot_data$IDENT <- factor(boxplot_data$IDENT, levels = names(sort(median_values, decreasing = F)))
# Plot
p <- ggplot(boxplot_data, aes(x = IDENT, y = AUC_UPR_93_REACTOME, fill = IDENT)) +
geom_boxplot() +
labs(x = NULL, y = "AUC_UPR_93_REACTOME") +
theme_minimal() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
NoLegend()
p
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_93_UPR_AUCell_ordered_boxplot_IDENT.pdf"), width = 5, height = 5, bg = "white")
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_93_UPR_AUCell_ordered_boxplot_IDENT.png"), width = 5, height = 5, dpi = 1000, bg = 'white')
FeaturePlot(data.seurat, reduction = "UMAP", features = "AUC_UPR_93_REACTOME")
boxplot_data <- data.seurat@meta.data
boxplot_data$HSP90AA1 <- data.seurat@assays$RNA@data["HSP90AA1",]
# Filter out <5 cells per annotation
boxplot_data <- boxplot_data[boxplot_data$IDENT %in% names(which(table(boxplot_data$IDENT) >= 5)),]
# Calculating median values of "HSP90AA1" for each group
median_values <- tapply(boxplot_data$HSP90AA1, boxplot_data$IDENT, median)
# Sorting the metadata based on median values
boxplot_data$IDENT <- factor(boxplot_data$IDENT, levels = names(sort(median_values, decreasing = F)))
# Plot
p <- ggplot(boxplot_data, aes(x = IDENT, y = HSP90AA1, fill = IDENT)) +
geom_boxplot() +
labs(x = NULL, y = "HSP90AA1 Normalized expression") +
theme_minimal() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
NoLegend()
p
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_HSP90AA1_ordered_boxplot_IDENT.pdf"), width = 5, height = 5, bg = "white")
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_HSP90AA1_ordered_boxplot_IDENT.png"), width = 5, height = 5, dpi = 1000, bg = 'white')
FeaturePlot(data.seurat, reduction = "UMAP", features = "HSP90AA1")
boxplot_data <- data.seurat@meta.data
boxplot_data$HSPA8 <- data.seurat@assays$RNA@data["HSPA8",]
# Filter out <5 cells per annotation
boxplot_data <- boxplot_data[boxplot_data$IDENT %in% names(which(table(boxplot_data$IDENT) >= 5)),]
# Calculating median values of "HSPA8" for each group
median_values <- tapply(boxplot_data$HSPA8, boxplot_data$IDENT, median)
# Sorting the metadata based on median values
boxplot_data$IDENT <- factor(boxplot_data$IDENT, levels = names(sort(median_values, decreasing = F)))
# Plot
p <- ggplot(boxplot_data, aes(x = IDENT, y = HSPA8, fill = IDENT)) +
geom_boxplot() +
labs(x = NULL, y = "HSPA8 Normalized expression") +
theme_minimal() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
NoLegend()
p
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_HSPA8_ordered_boxplot_IDENT.pdf"), width = 5, height = 5, bg = "white")
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_HSPA8_ordered_boxplot_IDENT.png"), width = 5, height = 5, dpi = 1000, bg = 'white')
FeaturePlot(data.seurat, reduction = "UMAP", features = "HSPA8")
boxplot_data <- data.seurat@meta.data
boxplot_data$ATF4 <- data.seurat@assays$RNA@data["ATF4",]
# Filter out <5 cells per annotation
boxplot_data <- boxplot_data[boxplot_data$IDENT %in% names(which(table(boxplot_data$IDENT) >= 5)),]
# Calculating median values of "ATF4" for each group
median_values <- tapply(boxplot_data$ATF4, boxplot_data$IDENT, median)
# Sorting the metadata based on median values
boxplot_data$IDENT <- factor(boxplot_data$IDENT, levels = names(sort(median_values, decreasing = F)))
# Plot
p <- ggplot(boxplot_data, aes(x = IDENT, y = ATF4, fill = IDENT)) +
geom_boxplot() +
labs(x = NULL, y = "ATF4 Normalized expression") +
theme_minimal() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
NoLegend()
p
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_ATF4_ordered_boxplot_IDENT.pdf"), width = 5, height = 5, bg = "white")
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_ATF4_ordered_boxplot_IDENT.png"), width = 5, height = 5, dpi = 1000, bg = 'white')
FeaturePlot(data.seurat, reduction = "UMAP", features = "ATF4")
# Subset to neuron cells from metadata
neuron.cells <- rownames(data.neurons)[rownames(data.neurons) %in% colnames(data.seurat)]
data.seurat <- subset(data.seurat, cells = neuron.cells)
# Add/replace new metadata
data.seurat$CLUSTER <- data.neurons[colnames(data.seurat), "CLUSTER"]
data.seurat$IDENT <- data.neurons[colnames(data.seurat), "IDENT"]
# Add UMAP
data.seurat[["UMAP"]] <- CreateDimReducObject(embeddings = as.matrix(data.neurons[,c("UMAP_1", "UMAP_2")]), key = "UMAP_", assay = "RNA")
hist(data.seurat$AUC_OXPHOS_135_KEGG, breaks = 100)
boxplot_data <- data.seurat@meta.data
# Filter out <5 cells per annotation
boxplot_data <- boxplot_data[boxplot_data$IDENT %in% names(which(table(boxplot_data$IDENT) >= 5)),]
# Calculating median values of "AUC_OXPHOS_135_KEGG" for each group
median_values <- tapply(boxplot_data$AUC_OXPHOS_135_KEGG, boxplot_data$IDENT, median)
# Sorting the metadata based on median values
boxplot_data$IDENT <- factor(boxplot_data$IDENT, levels = names(sort(median_values, decreasing = F)))
# Plot
p <- ggplot(boxplot_data, aes(x = IDENT, y = AUC_OXPHOS_135_KEGG, fill = IDENT)) +
geom_boxplot() +
labs(x = NULL, y = "AUC_OXPHOS_135_KEGG") +
theme_minimal() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
NoLegend()
p
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_135_Oxphos_AUCell_ordered_boxplot_IDENT_Neurons.pdf"), width = 5, height = 5, bg = "white")
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_135_Oxphos_AUCell_ordered_boxplot_IDENT_Neurons.png"), width = 5, height = 5, dpi = 1000, bg = 'white')
FeaturePlot(data.seurat, reduction = "UMAP", features = "AUC_OXPHOS_135_KEGG")
hist(data.seurat$AUC_UPR_93_REACTOME, breaks = 100)
boxplot_data <- data.seurat@meta.data
# Filter out <5 cells per annotation
boxplot_data <- boxplot_data[boxplot_data$IDENT %in% names(which(table(boxplot_data$IDENT) >= 5)),]
# Calculating median values of "AUC_UPR_93_REACTOME" for each group
median_values <- tapply(boxplot_data$AUC_UPR_93_REACTOME, boxplot_data$IDENT, median)
# Sorting the metadata based on median values
boxplot_data$IDENT <- factor(boxplot_data$IDENT, levels = names(sort(median_values, decreasing = F)))
# Plot
p <- ggplot(boxplot_data, aes(x = IDENT, y = AUC_UPR_93_REACTOME, fill = IDENT)) +
geom_boxplot() +
labs(x = NULL, y = "AUC_UPR_93_REACTOME") +
theme_minimal() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
NoLegend()
p
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_93_UPR_AUCell_ordered_boxplot_IDENT_Neurons.pdf"), width = 5, height = 5, bg = "white")
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_93_UPR_AUCell_ordered_boxplot_IDENT_Neurons.png"), width = 5, height = 5, dpi = 1000, bg = 'white')
FeaturePlot(data.seurat, reduction = "UMAP", features = "AUC_UPR_93_REACTOME")
boxplot_data <- data.seurat@meta.data
boxplot_data$HSP90AA1 <- data.seurat@assays$RNA@data["HSP90AA1",]
# Filter out <5 cells per annotation
boxplot_data <- boxplot_data[boxplot_data$IDENT %in% names(which(table(boxplot_data$IDENT) >= 5)),]
# Calculating median values of "HSP90AA1" for each group
median_values <- tapply(boxplot_data$HSP90AA1, boxplot_data$IDENT, median)
# Sorting the metadata based on median values
boxplot_data$IDENT <- factor(boxplot_data$IDENT, levels = names(sort(median_values, decreasing = F)))
# Plot
p <- ggplot(boxplot_data, aes(x = IDENT, y = HSP90AA1, fill = IDENT)) +
geom_boxplot() +
labs(x = NULL, y = "HSP90AA1 Normalized expression") +
theme_minimal() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
NoLegend()
p
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_HSP90AA1_ordered_boxplot_IDENT_Neurons.pdf"), width = 5, height = 5, bg = "white")
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_HSP90AA1_ordered_boxplot_IDENT_Neurons.png"), width = 5, height = 5, dpi = 1000, bg = 'white')
FeaturePlot(data.seurat, reduction = "UMAP", features = "HSP90AA1")
boxplot_data <- data.seurat@meta.data
boxplot_data$HSPA8 <- data.seurat@assays$RNA@data["HSPA8",]
# Filter out <5 cells per annotation
boxplot_data <- boxplot_data[boxplot_data$IDENT %in% names(which(table(boxplot_data$IDENT) >= 5)),]
# Calculating median values of "HSPA8" for each group
median_values <- tapply(boxplot_data$HSPA8, boxplot_data$IDENT, median)
# Sorting the metadata based on median values
boxplot_data$IDENT <- factor(boxplot_data$IDENT, levels = names(sort(median_values, decreasing = F)))
# Plot
p <- ggplot(boxplot_data, aes(x = IDENT, y = HSPA8, fill = IDENT)) +
geom_boxplot() +
labs(x = NULL, y = "HSPA8 Normalized expression") +
theme_minimal() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
NoLegend()
p
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_HSPA8_ordered_boxplot_IDENT_Neurons.pdf"), width = 5, height = 5, bg = "white")
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_HSPA8_ordered_boxplot_IDENT_Neurons.png"), width = 5, height = 5, dpi = 1000, bg = 'white')
FeaturePlot(data.seurat, reduction = "UMAP", features = "HSPA8")
boxplot_data <- data.seurat@meta.data
boxplot_data$ATF4 <- data.seurat@assays$RNA@data["ATF4",]
# Filter out <5 cells per annotation
boxplot_data <- boxplot_data[boxplot_data$IDENT %in% names(which(table(boxplot_data$IDENT) >= 5)),]
# Calculating median values of "ATF4" for each group
median_values <- tapply(boxplot_data$ATF4, boxplot_data$IDENT, median)
# Sorting the metadata based on median values
boxplot_data$IDENT <- factor(boxplot_data$IDENT, levels = names(sort(median_values, decreasing = F)))
# Plot
p <- ggplot(boxplot_data, aes(x = IDENT, y = ATF4, fill = IDENT)) +
geom_boxplot() +
labs(x = NULL, y = "ATF4 Normalized expression") +
theme_minimal() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
NoLegend()
p
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_ATF4_ordered_boxplot_IDENT_Neurons.pdf"), width = 5, height = 5, bg = "white")
#ggsave(p, filename = paste0(output_figure_prefix, "Martirosyan_ATF4_ordered_boxplot_IDENT_Neurons.png"), width = 5, height = 5, dpi = 1000, bg = 'white')
FeaturePlot(data.seurat, reduction = "UMAP", features = "ATF4")