Alzheimer’s disease (AD) is a neurodegenerative condition that leads to cognitive decline and memory loss. This project aims to analyze gene expression data to identify differentially expressed genes and biological pathways involved in AD. Understanding gene-level changes can help guide future research and therapeutic strategies.
library(tidyverse) library(DESeq2) library(ggplot2) library(pheatmap)
CRH downregulated in AD (stress-related) TNF, RAGE signaling, LTD, and CAMs are altered in AD brains
count_matrix <- read.delim("upload your dataset" + sep = "\t", header = TRUE, row.names = 1) sample_names <- colnames(count_matrix) condition <- ifelse(grepl("Old$", sample_names), "Old",
+ ifelse(grepl("AD$", sample_names), "AD",
+ ifelse(grepl("Young$", sample_names), "Young", NA)))
metadata <- data.frame( sample = sample_names,
+ condition = factor(condition, levels = c("Old", "AD", "Young"))
+ )
rownames(metadata) <- sample_names # Required for DESeq2
if (!requireNamespace("DESeq2", quietly = TRUE)) {
+ install.packages("BiocManager")
+ BiocManager::install("DESeq2")
+ }
library(DESeq2)
dds <- DESeqDataSetFromMatrix(countData = count_matrix,
+ colData = metadata,
+ design = ~ condition)
dds <- dds[rowSums(counts(dds)) > 10, ]
dds <- DESeq(dds)
res_AD_vs_Old <- results(dds, contrast = c("condition", "AD", "Old"))
res_AD_vs_Old <- results(dds, contrast = c("condition", "AD", "Old"))
res_AD_vs_Old <- results(dds, contrast = c("condition", "AD", "Old"))
res_AD_vs_Old <- results(dds, contrast = c("condition", "AD", "Old"))
res_ordered <- res_AD_vs_Old[order(res_AD_vs_Old$pvalue), ]
res_ordered <- na.omit(res_ordered) library(ggplot2)
library(reshape2)
vsd <- vst(dds) # dds must be your DESeq2 object (already created with DESeq())
library(DESeq2)
vsd <- vst(dds) # 'dds' should be your DESeq2 object
dds <- DESeqDataSetFromMatrix(countData = count_matrix, colData = metadata, design = ~ condition)
dds <- DESeq(dds)
library(DESeq2)
dds <- DESeqDataSetFromMatrix(countData = count_matrix,
+ colData = metadata,
+ design = ~ condition)
dds <- DESeq(dds)
top_genes <- c("DUSP6", "CRH", "LOC101926975", "KLF15", "C2orf16") expr_data <- assay(vsd)[top_genes, ] # rows = genes, columns = samples
expr_df <- as.data.frame(t(expr_data))
expr_df$condition <- colData(vsd)$condition
expr_long <- melt(expr_df, id.vars = "condition",
+ variable.name = "gene",
+ value.name = "expression")
ggplot(expr_long, aes(x = condition, y = expression, fill = condition)) +
+ geom_boxplot(outlier.shape = NA, alpha = 0.6) +
+ geom_jitter(width = 0.2, size = 1.8, alpha = 0.8) +
+ facet_wrap(~ gene, scales = "free_y", ncol = 2) +
+ labs(
+ title = "Top 5 Differentially Expressed Genes (AD vs Old)",
+ x = "Condition",
+ y = "Normalized Expression (VST)"
+ ) +
+ theme_minimal(base_size = 13) +
+ scale_fill_manual(values = c("Old" = "#FDB863", "AD" = "#B2ABD2", "Young" = "#5E3C99"))
theme(
+ strip.text = element_text(face = "bold", size = 13),
+ axis.text.x = element_text(angle = 30, hjust = 1)
+ )
library(ggpubr)
my_comparisons <- list(c("AD", "Old"))
ggboxplot(expr_long, x = "condition", y = "expression", fill = "condition",
+ palette = c("Old" = "#FDB863", "AD" = "#B2ABD2", "Young" = "#5E3C99"),
+ facet.by = "gene", short.panel.labs = TRUE,
+ add = "jitter", width = 0.6) +
+ stat_compare_means(comparisons = my_comparisons,
+ method = "wilcox.test", # you can change to "t.test" if appropriate
+ label = "p.signif", # shows stars (*, **, ***)
+ hide.ns = TRUE) +
+ labs(
+ title = "CRH and KLF15 Expression with Significance (AD vs Old)",
+ x = "Condition",
+ y = "Normalized Expression (VST)"
+ ) +
+ theme_minimal(base_size = 13)
genes_of_interest <- c("CRH", "KLF15")
expr_data <- assay(vsd)[genes_of_interest, ]
expr_df <- as.data.frame(t(expr_data))
expr_df$condition <- colData(vsd)$condition
expr_long <- melt(expr_df, id.vars = "condition", + variable.name = "gene", + value.name = "expression")
my_comparisons <- list(c("AD", "Old"))
ggboxplot(expr_long, + x = "condition", + y = "expression", + fill = "condition",+ palette = c("Old" = "#FDB863", "AD" = "#B2ABD2", "Young" = "#5E3C99"),+ facet.by = "gene", + short.panel.labs = TRUE,
+ add = "jitter", + width = 0.6) ++ stat_compare_means(comparisons = my_comparisons,+ method = "wilcox.test",+ label = "p.signif",+ hide.ns = FALSE)+ labs( title = "Expression of CRH and KLF15 with Statistical Significance", + x = "Condition", + y = "Normalized Expression (VST)" ) + theme_minimal(base_size = 13)
ggboxplot(expr_long, x = "condition", y = "expression", fill = "condition",
+ palette = c("Old" = "#FDB863", "AD" = "#B2ABD2", "Young" = "#5E3C99"),
+ facet.by = "gene", short.panel.labs = TRUE, width = 0.6, add = "jitter") +
+ stat_compare_means(comparisons = list(c("AD", "Old")),
+ method = "wilcox.test",
+ label = "p.signif",
+ hide.ns = TRUE) + # show stars (*, **, ***)
+ labs(
+ title = "Expression of CRH and KLF15 with Significance Markers",
+ x = "Condition",
+ y = "Normalized Expression (VST)"
+ ) +
+ theme_minimal(base_size = 13)
library(ggplot2)
library(reshape2)
genes_of_interest <- c("CRH", "KLF15")
expr_data <- assay(vsd)[genes_of_interest, ]
expr_df <- as.data.frame(t(expr_data)) # rows = samples, columns = genes
expr_df$condition <- colData(vsd)$condition
expr_long <- melt(expr_df, id.vars = "condition", + variable.name = "gene", + value.name = "expression")
ggplot(expr_long, aes(x = condition, y = expression, fill = condition))+ geom_boxplot(outlier.shape = NA, alpha = 0.6)+ geom_jitter(width = 0.2, size = 1.8, alpha = 0.8) facet_wrap(~ gene, scales = "free_y", ncol = 2) + labs( title = "Expression of CRH and KLF15 across AD, Old, and Young Samples",+ x = "Condition",+ y = "Normalized Expression (VST)"+ theme_minimal(base_size = 13)+ scale_fill_manual(values = c("Old" = "#FDB863", "AD" = "#B2ABD2", "Young" = "#5E3C99")) + theme( strip.text = element_text(face = "bold", size = 13), axis.text.x = element_text(angle = 30, hjust = 1)
In this study, I analyzed gene expression differences between Alzheimer’s Disease (AD), Old (non-AD aged), and Young brain tissue samples using DESeq2 on publicly available RNA-seq data. Differential Expression Analysis– Out of 27,135 genes, several showed significant differences between AD and Old samples. The top five genes ranked by p-value were
CRH– Downregulated in AD
KLF15– Upregulated in AD
LOC101926975– Downregulated in AD
C2orf16– Downregulated in AD
DUSP6– Slightly downregulated in AD and Young compared to Old
CRH and KLF15 were selected for further investigation due to their consistent and biologically relevant expression patterns. Differential expression between conditions was assessed using the Wilcoxon rank-sum test (Mann–Whitney U test), as implemented in the ggpubr package. Significance was based on p-values.
CRH- Significantly lower in AD (p < 0.0001)
KLF15- Significantly higher in AD (p < 0.0001) Functional Interpretation–
CRH (Corticotropin-Releasing Hormone) is involved in the stress response and is normally expressed in the brain. Its downregulation may reflect impaired neuroendocrine signaling or neuronal loss in AD.
KLF15 (Kruppel-Like Factor 15) is a transcription factor linked to metabolism, inflammation, and circadian rhythm regulation. Its upregulation in AD suggests a potential compensatory metabolic response in diseased neurons.
Pathway Enrichment Analysis using Enrichr, the two genes were found to be associated with–
Stress hormone signaling (CRH via NR3C1) Transcriptional regulation and metabolism (KLF15, co-regulated with KLF9, PPARA) These findings suggest a possible shift in stress regulation and metabolic transcription in the Alzheimer’s brain.
CRH and KLF15 are significantly altered in Alzheimer’s Disease and may represent key molecular players in neurodegeneration.