Adapted Smart-seq3xpress Facilitates Selective Microglial Transcriptomic Profiling From Frozen Brain Tissue.
The 19 matches
- [1] § Results › PU.1-Based Approach Preserves Microglial Heterogeneity in Frozen Tissue ↔ 2V_02_mg_cells_UMAP_dot_plot.Rmd, lines 244–254 · score 0.91 · C1qa, C1qb, P2ry12, Clec7a, Ccl4, Ifit3
- [2] § Methods › Data Analysis › 3’ Bias Metrics ↔ 1DP_06_library_qc.Rmd, lines 153–169 · score 0.91 · additional_sequence_annot.gtf, Gene body coverage, RSeQC, mm10_RefSeq.bed, usegalaxy.eu, mRNA
- [3] § Methods › Data Analysis › Data Filtering ↔ 1DP_05_all_cells_LC_FN_raw_data_to_seurat_merged_integrated_UMAP.Rmd, lines 236–268 · score 0.80 · UMIfraction, percent.spike, nCount_RNA, nFeature_RNA, ERCC, SIRV
- [4] § Methods › Data Analysis › Data Filtering ↔ 1DP_00_all_cells_raw_data_to_seurat_merged_integrated_UMAP.Rmd, lines 268–302 · score 0.80 · UMIfraction, percent.spike, nCount_RNA, nFeature_RNA, ERCC, SIRV
- [5] § Methods › Data Analysis › Cell–Cell Communication Analysis ↔ 1DP_04_CellChat.Rmd, lines 168–188 · score 0.80 · computeNetSimilarityPairwise, netEmbedding, mergeCellChat, netClustering, LiveNuclei, LiveCells
- [6] § Methods › Data Analysis › Normalization, Integration, and Clustering ↔ 1DP_01_mg_cells_raw_data_to_seurat_merged_integrated_UMAP.Rmd, lines 115–144 · score 0.79 · FindClusters, FindNeighbors, SCTransform, CCAIntegration, UMAP, resolution
- [7] § Methods › Data Analysis › Gene Ontology Enrichment Analysis ↔ 1DP_03_GO.Rmd, lines 10–47 · score 0.78 · clusterProfiler, Gene ontology, GO terms, functional pathways, biological process, LiveCells
- [8] § Methods › Data Analysis › Normalization, Integration, and Clustering ↔ 1DP_00_all_cells_raw_data_to_seurat_merged_integrated_UMAP.Rmd, lines 268–302 · score 0.78 · FindClusters, FindNeighbors, SCTransform, CCAIntegration, UMAP, resolution
- [9] § Methods › Data Analysis › Normalization, Integration, and Clustering ↔ 1DP_05_all_cells_LC_FN_raw_data_to_seurat_merged_integrated_UMAP.Rmd, lines 236–268 · score 0.78 · FindClusters, FindNeighbors, SCTransform, CCAIntegration, UMAP, resolution
- [10] § Results › PU.1-Based Enrichment Enhances snRNA-seq Profiling of Microglia in Frozen Brain Tissue ↔ 2V_00_all_cells_UMAP_dot_plot.Rmd, lines 156–168 · score 0.77 · Cx3cr1, endothelial cells, mural cells, neutrophils, astrocytes, monocytes
- [11] § Methods › Data Analysis › Normalization, Integration, and Clustering ↔ 1DP_01_mg_cells_raw_data_to_seurat_merged_integrated_UMAP.Rmd, lines 115–144 · score 0.77 · FindClusters, FindNeighbors, SCTransform, CCAIntegration, UMAP, resolution
- [12] § Results › PU.1-Based Protocol Enables Detection of Inflammatory Microglial States ↔ 2V_04_DEG.Rmd, lines 168–203 · score 0.69 · Hif1a, Clec7a, ARM population, Cd63, Ctsb, Apoe
- [13] § Methods › Data Analysis › Differential Gene Expression Analysis ↔ 1DP_02_DEG.Rmd, lines 158–243 · score 0.62 · FindMarkers, RNA assay, isolation protocol, HM, Seurat, ARM
- [14] § Methods › Data Analysis › Identification of Cluster Markers ↔ 2V_02_mg_cells_UMAP_dot_plot.Rmd, lines 623–666 · score 0.60 · module scores, AddModuleScore, Seurat, UMAP, genes
- [15] § Results › PU.1-Based Enrichment Enhances snRNA-seq Profiling of Microglia in Frozen Brain Tissue ↔ 2V_00_all_cells_UMAP_dot_plot.Rmd, lines 156–168 · score 0.57 · endothelial cells, mural cells, neutrophils, astrocytes, monocytes, PVM
- [16] § Results › PU.1-Based Protocol Enables Detection of Inflammatory Microglial States ↔ 2V_04_DEG.Rmd, lines 33–134 · score 0.55 · log2 fold change, Volcano, log10, overlap, HM, LiveNuclei
- [17] § Methods › Data Analysis › Differential Gene Expression Analysis ↔ 2V_04_DEG.Rmd, lines 33–134 · score 0.54 · log2 fold change, HM, isolation protocol, ARM, gene, cells
- [18] § Methods › Data Analysis › 3’ Bias Metrics ↔ 1DP_06_library_qc.Rmd, lines 138–150 · score 0.51 · prefixes, internal, ERCC, SIRV, header, BAM
- [19] § Results › PU.1-Based Profiling Captures Cell–Cell Interactions Among Microglia ↔ 2V_06_CellChat.Rmd, lines 131–191 · score 0.50 · CellChat, chord diagrams, interactions, LiveNuclei, signaling, LiveCells
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
R Markdown · 561 lines · 21 KB · no license · 3 matches
- ---
- title: "2V_04_DEG"
- author: "Dominika Dostalova"
- date: "2024-11-27"
- output: html_document
- editor_options:
- chunk_output_type: console
- ---
- Introduction
- This script is dedicated to visualizing processed data from **1DP_02_DEG.Rmd**. The processed data are represented using **Volcano and Scatter plots** to illustrate DEG analysis.
- #Loading of improtant files
- ```{r Load packages, eval = TRUE, echo = FALSE, message = FALSE, warning=FALSE}
- suppressMessages(library("Matrix"))
- suppressMessages(library("ggplot2"))
- suppressMessages(library("Seurat"))
- suppressMessages(library("sctransform"))
- suppressMessages(library("ggrepel"))
- suppressMessages(library("dplyr"))
- suppressMessages(library("magrittr"))
- suppressMessages(library("patchwork"))
- suppressMessages(library("scales"))
- suppressMessages(library("tidyr"))
- suppressMessages(library("openxlsx"))
- plots <- list()
- col_list <- list()
- orders <- list()
- source("0F_colours_orders.R", local = F, echo = F, print.eval = F)
- source("0F_general_functions.R", local = F, echo = F, print.eval = F)
- gene_symbol <- read.table("data/Smartseq3xpress.gene_names.txt", header = TRUE)#File generaetd with zUMIS
- ```
- #Volcano Plots for comparison DEG in HM and ARM across isolation protocols
- ```{r Volcano, eval = TRUE, echo = FALSE, message = FALSE, warning=FALSE}
- # Load the combined RDS file containing all conditions
- de_results_all <- readRDS("ws/1DP_02_DEG_ARMvsHM_allconditions.rds")
- # Define genes of interest - ARM Frigerio2019
- genes_of_interest <- c(
- "Apoe", "Cst7", "Lpl", "Clec7a", "Lyz2", "Ccl3", "Lgals3bp", "Cd63", "H2-D1",
- "Ctsb", "Cd9", "Ctsl", "Fth1", "Ctsz", "Cd52", "Ctsd", "B2m", "Eef1a1", "Cd83",
- "Ccl6", "Hif1a", "Tyrobp", "Serpine2", "Cadm1", "H2-K1", "Npc2", "Pkm",
- "Aldoa", "Tpi1", "Pld3", "Gusb", "Plek", "Ldha"
- )
- # Define protocol-specific colors (ordered for use with list indices)
- protocol_colors <- c("#5F7048", "#8a5c1a", "#d9741a") # Dark Green, Brown, Orange
- # Get protocol names
- protocol_names <- names(de_results_all)
- # Initialize an empty list to store plots
- plots <- list()
- # Loop through each protocol
- for (i in seq_along(protocol_names)) {
- protocol <- protocol_names[i]
- # Extract DE results
- de_results <- de_results_all[[protocol]]
- # Map ENSEMBL IDs to gene symbols
- de_results$gene_symbol <- gene_symbol$gene_name[match(rownames(de_results), gene_symbol$gene_id)]
- # Add significance
- de_results$significant <- with(de_results, p_val_adj < 0.05 & abs(avg_log2FC) > 1)
- # Add coloring category
- de_results$color_group <- ifelse(
- de_results$avg_log2FC > -1 & de_results$avg_log2FC < 1,
- "lowFC",
- ifelse(de_results$significant, "significant", "nonsig")
- )
- # Filter genes of interest
- gene_inter <- de_results %>%
- filter(gene_symbol %in% genes_of_interest)
- # Volcano plot
- plots[[protocol]] <- ggplot(data = de_results,
- aes(x = avg_log2FC, y = -log10(p_val_adj))) +
- geom_point(aes(colour = color_group),
- alpha = 0.6,
- shape = 16,
- size = 1) +
- geom_point(data = gene_inter,
- aes(x = avg_log2FC, y = -log10(p_val_adj)),
- shape = 21,
- fill = "black",
- color = "black",
- size = 1,
- stroke = 0.2) +
- geom_label_repel(data = gene_inter %>% filter(significant),
- aes(label = gene_symbol),
- box.padding = 0.22,
- label.padding = 0.10,
- point.padding = 0.1,
- color = "black",
- size = 1.8,
- max.iter = 20000,
- max.overlaps = 20,
- min.segment.length = 0,
- force = 30,
- nudge_y = 1,
- label.size = 0,
- segment.size = 0.1) +
- geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "#B6C7DB", linewidth = 0.1) +
- geom_vline(xintercept = c(-1, 1), linetype = "dashed", color = "#B6C7DB", linewidth = 0.1) +
- labs(
- title = paste(protocol, "\n(ARM vs HM)"),
- subtitle = (" down in ARM up in ARM"),
- x = "Log2 fold change",
- y = if (i == 1) "-Log10 adjusted p-value" else NULL
- ) +
- scale_color_manual(
- values = c(
- "nonsig" = "gray80",
- "lowFC" = "gray80",
- "significant" = protocol_colors[i]
- ),
- guide = "none"
- ) +
- scale_x_continuous(limits = c(-6.5, 9.1)) +
- scale_y_continuous(limits = c(-5, NA )) +#70
- theme_mk_title +
- remove_grid
- print(paste("Volcano plot created for:", protocol))
- }
- # Combine plots for viewing
- plots[["volcano"]] <- plots[["LiveCells"]] + plots[["LiveNuclei"]] + plots[["FixedNuclei"]]
- plots[["volcano"]]
- ```
- # Fig 03 A
- ```{r Fig03_1stline, eval = TRUE, echo = FALSE, message = FALSE, warning=FALSE}
- layout_1stline <- "
- ABC
- "
- plots[["1st_line"]] <- plots[["LiveCells"]] + plots[["LiveNuclei"]] + plots[["FixedNuclei"]] +
- plot_layout(guides = "collect", design = layout_1stline) &
- theme(
- legend.position = "bottom",
- legend.justification = "center",
- legend.margin = margin(t = -10)
- ) &
- plot_annotation(
- tag_levels = list(c('A', " "),
- theme = theme(
- plot.tag = element_text(size = 7, face = "plain")
- )))
- plots[["1st_line"]]
- ggsave(
- filename = "results/2V_Fig03_1stline_VolcanoPlots.svg",
- plot = plots[["1st_line"]],
- device = "svg",
- width = 16.9,
- height = 7,
- units = "cm"
- )
- ```
- #SCATTER PLOTS - differences in mean expression of genes in ARM population
- #Scatter plot LiveCells vs FixedNuclei in ARM
- ```{r Table for ScatterPlot LiveCells vs FixedNuclei, eval = TRUE, echo = FALSE, message = FALSE, warning=FALSE}
- #gene_table - helper for faster dividing of ARM genes into slots for ScatterPlot
- gene_table <- readRDS("ws/1DP_03_gene_table_ScatterPlot_LCvsFN.rds")
- list_gene_names_ARM_sym <- c(
- "Apoe", "Cst7", "Lpl", "Clec7a", "Lyz2", "Ccl3", "Lgals3bp", "Cd63", "H2-D1",
- "Ctsb", "Cd9", "Ctsl", "Fth1", "Ctsz", "Cd52", "Ctsd", "B2m", "Eef1a1", "Cd83",
- "Ccl6", "Hif1a", "Tyrobp", "Serpine2", "Cadm1", "H2-K1", "Npc2", "Pkm",
- "Aldoa", "Tpi1", "Pld3", "Gusb", "Plek", "Ldha"
- )
- # Assuming `gene_table` is your data frame
- # Initialize vectors for each category
- up2_fn <- gene_table$`Upregulated >2x in FN`[gene_table$`Upregulated >2x in FN` %in% list_gene_names_ARM_sym]
- up1_fn <- gene_table$`Upregulated 1-2x in FN`[gene_table$`Upregulated 1-2x in FN` %in% list_gene_names_ARM_sym]
- up0_fn <- gene_table$`Upregulated 0-1x in FN`[gene_table$`Upregulated 0-1x in FN` %in% list_gene_names_ARM_sym]
- up2_lc <- gene_table$`Upregulated >2x in LC`[gene_table$`Upregulated >2x in LC` %in% list_gene_names_ARM_sym]
- up1_lc <- gene_table$`Upregulated 1-2x in LC`[gene_table$`Upregulated 1-2x in LC` %in% list_gene_names_ARM_sym]
- up0_lc <- gene_table$`Upregulated 0-1x in LC`[gene_table$`Upregulated 0-1x in LC` %in% list_gene_names_ARM_sym]
- # Combine results into a named list for clarity
- result <- list(
- "Upregulated >2x in FN" = up2_fn,
- "Upregulated 1-2x in FN" = up1_fn,
- "Upregulated 0-1x in FN" = up0_fn,
- "Upregulated >2x in LC" = up2_lc,
- "Upregulated 1-2x in LC" = up1_lc,
- "Upregulated 0-1x in LC" = up0_lc
- )
- # Print results
- print(result)
- ```
- ```{r Scatter plot LiveCells vs FixedNuclei, eval = TRUE, echo = FALSE, message = FALSE, warning=FALSE}
- topT <- readRDS("ws/1DP_03_top_genes_ARM_file.rds")
- # Define gene groups with their specific colors
- gene_groups <- list(
- up2 = list(genes = Symbol_to_ENSEMBL(c("Fth1", "Eef1a1")), color = "#5B1F3D"),
- up1 = list(genes = Symbol_to_ENSEMBL(c("Cd52", "Apoe", "Ctsd", "Ctsz", "Ccl6", "Npc2", "Ctsl", "Ctsb", "Tpi1", "Cd63", "Cd9", "Tyrobp", "Aldoa","Pkm", "B2m", "Ldha", "Cst7", "Lyz2", "H2-D1")), color = "#A7586D"),
- up0 = list(genes = Symbol_to_ENSEMBL(c("Ccl3", "Pld3", "Cd83", "Lpl", "Plek", "Gusb", "Serpine2", "Lgals3bp", "H2-K1", "Clec7a")), color = "#8aa5bf")
- )
- # Add a `group` and `label_color` column to `topT`
- topT$group <- NA
- topT$label_color <- NA
- for (group in names(gene_groups)) {
- genes <- toupper(gene_groups[[group]]$genes)
- topT$group[toupper(rownames(topT)) %in% genes] <- group
- topT$label_color[toupper(rownames(topT)) %in% genes] <- gene_groups[[group]]$color
- }
- plots[["scatter_plotLCvsFN"]] <- ggplot(topT, aes(x = LiveCells, y = FixedNuclei)) +
- labs(
- x = "Log normalized mean expression - LiveCells",
- y = "Log normalized mean expression - FixedNuclei"
- ) +
- geom_abline(slope = 1, intercept = c(0, -2, -1, 1, 2), linetype = c(1, 3, 3, 3, 3)) +
- # Base points with color based on differences
- geom_point(
- aes(color = ifelse(
- LiveCells - FixedNuclei > 1, "#5F7048", # Strongly up in LiveCells
- ifelse(
- FixedNuclei - LiveCells > 1, "#d9741a", # Strongly up in FixedNuclei
- "#A1B8D4" # Similar expression
- )
- )),
- size = 0.5,
- na.rm = TRUE
- ) +
- # Highlight gene groups
- geom_point(data = subset(topT, !is.na(group)), aes(color = group), size = 0.5) +
- # Add gene labels only for up1 and up2
- geom_label_repel(
- data = subset(topT, group %in% c("up1", "up2")),
- aes(
- label = ENSEMBL_to_Symbol(rownames(subset(topT, group %in% c("up1", "up2")))),
- color = label_color
- ),
- box.padding = 0.22,
- label.padding = 0.1,
- point.padding = 0.1,
- size = 1.8,
- max.iter = 20000,
- min.segment.length = 0,
- max.overlaps = 20,
- show.legend = FALSE,
- label.size = 0,
- segment.size = 0.1
- )+
- # Update the manual color scale with more colors
- scale_color_manual(
- values = c(
- "black", # labels >2 LiveCells
- "#5F7048", # points >1 LiveCells
- # "#7286AA", # labels for genes <1
- "gray80", # points < 1
- "black", # labels >1 LiveCells
- "#d9741a", # points >1 FixedNuclei
- "black", # points for genes <1
- "black", # points for genes >1 LiveCells
- "black" # points for genes >2 LiveCells
- )
- ) +
- theme_mk +
- remove_grid +
- theme(
- legend.position = "none"
- )
- plots[["scatter_plotLCvsFN"]]
- ```
- #Scatter plot LiveNuclei vs FixedNuclei in ARM
- ```{r Table for ScatterPlot LiveNuclei vs FixedNuclei, eval = TRUE, echo = FALSE, message = FALSE, warning=FALSE}
- #gene_table - helper for faster dividing of ARM genes into slots for ScatterPlot
- gene_table <- readRDS("ws/1DP_03_gene_table_ScatterPlot_LNvsFN.rds")
- #filtering for ARM genes
- list_gene_names_ARM_sym <- c(
- "Apoe", "Cst7", "Lpl", "Clec7a", "Lyz2", "Ccl3", "Lgals3bp", "Cd63", "H2-D1",
- "Ctsb", "Cd9", "Ctsl", "Fth1", "Ctsz", "Cd52", "Ctsd", "B2m", "Eef1a1", "Cd83",
- "Ccl6", "Hif1a", "Tyrobp", "Serpine2", "Cadm1", "H2-K1", "Npc2", "Pkm",
- "Aldoa", "Tpi1", "Pld3", "Gusb", "Plek", "Ldha"
- )
- # Assuming `gene_table` is your data frame
- # Initialize vectors for each category
- up2_fn <- gene_table$`Upregulated >2x in FN`[gene_table$`Upregulated >2x in FN` %in% list_gene_names_ARM_sym]
- up1_fn <- gene_table$`Upregulated 1-2x in FN`[gene_table$`Upregulated 1-2x in FN` %in% list_gene_names_ARM_sym]
- up0_fn <- gene_table$`Upregulated 0-1x in FN`[gene_table$`Upregulated 0-1x in FN` %in% list_gene_names_ARM_sym]
- up2_ln <- gene_table$`Upregulated >2x in LN`[gene_table$`Upregulated >2x in LN` %in% list_gene_names_ARM_sym]
- up1_ln <- gene_table$`Upregulated 1-2x in LN`[gene_table$`Upregulated 1-2x in LN` %in% list_gene_names_ARM_sym]
- up0_ln <- gene_table$`Upregulated 0-1x in LN`[gene_table$`Upregulated 0-1x in LN` %in% list_gene_names_ARM_sym]
- # Combine results into a named list for clarity
- result <- list(
- "Upregulated >2x in FN" = up2_fn,
- "Upregulated 1-2x in FN" = up1_fn,
- "Upregulated 0-1x in FN" = up0_fn,
- "Upregulated >2x in LN" = up2_ln,
- "Upregulated 1-2x in LN" = up1_ln,
- "Upregulated 0-1x in LN" = up0_ln
- )
- # Print results
- print(result)
- ```
- ```{r Scatter plot LiveNuclei vs FixedNuclei, eval = TRUE, echo = FALSE, message = FALSE, warning=FALSE}
- # Load gene expression table for LN vs FN
- topT_LNvsFN <- readRDS("ws/1DP_03_top_genes_ARM_file.rds")
- # Define gene groups with their specific colors
- gene_groups_LNvsFN <- list(
- up1 = list(genes = Symbol_to_ENSEMBL(c("Lyz2")), color = "#A7586D"),
- up0 = list(genes = Symbol_to_ENSEMBL(c(
- "Cd83", "Ctsz", "Ccl6", "Hif1a", "Ctsl", "Serpine2", "Cd9", "Lgals3bp",
- "B2m", "H2-K1", "Cst7", "H2-D1", "Clec7a", "Cd52", "Ccl3", "Apoe",
- "Pld3", "Ctsd", "Lpl", "Plek", "Npc2", "Ctsb", "Tpi1", "Fth1",
- "Cd63", "Gusb", "Tyrobp", "Aldoa", "Cadm1", "Pkm", "Eef1a1", "Ldha"
- )), color = "#8aa5bf")
- )
- # Add `group` and `label_color` to a copy of topT
- topT_LNvsFN$group <- NA
- topT_LNvsFN$label_color <- NA
- for (group in names(gene_groups_LNvsFN)) {
- genes <- toupper(gene_groups_LNvsFN[[group]]$genes)
- topT_LNvsFN$group[toupper(rownames(topT_LNvsFN)) %in% genes] <- group
- topT_LNvsFN$label_color[toupper(rownames(topT_LNvsFN)) %in% genes] <- gene_groups_LNvsFN[[group]]$color
- }
- # Create the plot
- plots[["scatter_plotLNvsFN"]] <- ggplot(topT_LNvsFN, aes(x = LiveNuclei, y = FixedNuclei)) +
- labs(
- x = "Log normalized mean expression - LiveNuclei",
- y = "Log normalized mean expression - FixedNuclei"
- ) +
- geom_abline(slope = 1, intercept = c(0, -2, -1, 1, 2), linetype = c(1, 3, 3, 3, 3)) +
- # Base points
- geom_point(
- aes(color = ifelse(
- LiveNuclei - FixedNuclei > 1, "#8a5c1a",
- ifelse(FixedNuclei - LiveNuclei > 1, "#d9741a", "#A1B8D4")
- )),
- size = 0.5,
- na.rm = TRUE
- ) +
- # Highlight gene groups
- geom_point(data = subset(topT_LNvsFN, !is.na(group)), aes(color = group), size = 0.5) +
- # Add labels only for up1
- geom_label_repel(
- data = subset(topT_LNvsFN, group %in% c("up1")),
- aes(
- label = ENSEMBL_to_Symbol(rownames(subset(topT_LNvsFN, group %in% c("up1")))),
- color = label_color
- ),
- box.padding = 0.22,
- label.padding = 0.1,
- point.padding = 0.1,
- size = 1.8,
- max.iter = 20000,
- min.segment.length = 0,
- max.overlaps = 20,
- show.legend = FALSE,
- label.size = 0,
- segment.size = 0.1
- ) +
- # Update the manual color scale with more colors
- scale_color_manual(
- values = c(
- "#8a5c1a", # points >1 LiveNuclei
- #"#7286AA", # labels <1
- "gray80", # points < 1
- "black", # labels > LiveNuclei
- "#d9741a", #points >1 FixedNuclei
- "black", # points for genes <1
- "black" # points >1 LiveNuclei SF
- ),
- guide = "none"
- ) +
- theme_mk +
- remove_grid +
- theme(
- legend.position = "none", # Show legend for color mapping
- )
- plots[["scatter_plotLNvsFN"]]
- ```
- # Fig 03 C
- ```{r Fig03_1stline, eval = TRUE, echo = FALSE, message = FALSE, warning=FALSE}
- layout_1stline <- "
- AB"
- plots[["1st_line"]] <- plots[["scatter_plotLCvsFN"]] + plots[["scatter_plotLNvsFN"]]+
- plot_layout(design = layout_1stline)
- plots[["1st_line"]]
- ggsave(
- filename = "results/2V_Fig03_1stline_ScatterPlotLCvsFNt.svg", # Name of the file
- plot = plots[["1st_line"]], # The plot object to save
- device = "svg", # Specify the output format (png, pdf, svg)
- width = 12, # Width of the image
- height = 6, # Height of the image
- units = "cm" # Units for width and height
- )
- ```
- #Venn diagram with ARM activation - extraction only values
- ```{r Table with names from DEG, eval = TRUE, echo = FALSE, message = FALSE, warning=FALSE}
- # Create an empty list to store the filtered results
- filtered_de_results <- list()
- # Create an empty list to store filtered genes for each condition
- filtered_genes <- list()
- # Iterate over the differential expression results stored in all_de_results
- for (name in names(de_results_all)) {
- # Get the DE results for the current iteration
- de_results <- de_results_all[[name]]
- # Filter the results based on the condition: avg_log2FC > 1
- filtered_results <- subset(de_results, p_val_adj < 0.05 & avg_log2FC > 1)
- # Save the filtered results into the new list
- filtered_de_results[[name]] <- filtered_results
- # Store only the gene names that meet the condition avg_log2FC > 1
- filtered_genes[[name]] <- rownames(filtered_results)
- # Print a message for tracking progress
- print(paste("Filtered DE results for:", name))
- }
- # Create the combined table with gene presence/absence
- gene_overlap_table <- data.frame(
- Gene = unique(unlist(filtered_genes)),
- LiveCells = unique(unlist(filtered_genes)) %in% filtered_genes$LiveCells,
- LiveNuclei = unique(unlist(filtered_genes)) %in% filtered_genes$LiveNuclei,
- FixedNuclei = unique(unlist(filtered_genes)) %in% filtered_genes$FixedNuclei
- )
- # Add overlap and status information
- gene_overlap_table <- gene_overlap_table %>%
- rowwise() %>%
- mutate(
- OverlapCount = sum(c_across(LiveCells:FixedNuclei)),
- Status = case_when(
- OverlapCount == 3 ~ "Overlap All",
- OverlapCount == 2 & LiveCells & LiveNuclei ~ "LiveCells and LiveNuclei",
- OverlapCount == 2 & LiveCells & FixedNuclei ~ "LiveCells and FixedNuclei",
- OverlapCount == 2 & LiveNuclei & FixedNuclei ~ "LiveNuclei and FixedNuclei",
- OverlapCount == 1 & LiveCells ~ "Unique LiveCells",
- OverlapCount == 1 & LiveNuclei ~ "Unique LiveNuclei",
- OverlapCount == 1 & FixedNuclei ~ "Unique FixedNuclei",
- TRUE ~ "Other"
- )
- )
- # Split genes by category
- genes_by_category <- gene_overlap_table %>%
- select(Gene, Status) %>%
- group_by(Status) %>%
- mutate(GeneIndex = row_number()) %>% # Create an index for each gene in a category
- pivot_wider(names_from = Status, values_from = Gene, values_fill = NA)
- # Save the horizontal table to an Excel file
- wb <- createWorkbook()
- addWorksheet(wb, "Gene Overlap Analysis")
- writeData(wb, "Gene Overlap Analysis", genes_by_category)
- saveWorkbook(wb, "ws/2V_04_DEG_gene_overlap.xlsx", overwrite = TRUE)
- ```
- Gene numbers for DEG Venn diagram
- ```{r Venn, eval = TRUE, echo = FALSE, message = FALSE, warning=FALSE}
- # Create an empty list to store the filtered results
- filtered_de_results <- list()
- # Create an empty list to store filtered genes for each condition
- filtered_genes <- list()
- # Iterate over the differential expression results stored in all_de_results
- for (name in names(de_results_all)) {
- # Get the DE results for the current iteration
- de_results <- de_results_all[[name]]
- # Filter the results based on the condition: avg_log2FC > 1
- filtered_results <- subset(de_results, p_val_adj < 0.05 & avg_log2FC > 1)
- # Save the filtered results into the new list
- filtered_de_results[[name]] <- filtered_results
- # Store only the gene names that meet the condition avg_log2FC > 1
- filtered_genes[[name]] <- rownames(filtered_results)
- # Print a message for tracking progress
- print(paste("Filtered DE results for:", name))
- }
- # Create a combined table with presence/absence of genes in each condition
- gene_overlap_table <- data.frame(
- Gene = unique(unlist(filtered_genes)),
- LiveCells = unique(unlist(filtered_genes)) %in% filtered_genes$LiveCells,
- LiveNuclei = unique(unlist(filtered_genes)) %in% filtered_genes$LiveNuclei,
- FixedNuclei = unique(unlist(filtered_genes)) %in% filtered_genes$FixedNuclei
- )
- # Add overlap and status information
- gene_overlap_table <- gene_overlap_table %>%
- rowwise() %>%
- mutate(
- OverlapCount = sum(c_across(LiveCells:FixedNuclei)),
- Status = case_when(
- OverlapCount == 3 ~ "Overlap All",
- OverlapCount == 2 & LiveCells & LiveNuclei ~ "LiveCells and LiveNuclei",
- OverlapCount == 2 & LiveCells & FixedNuclei ~ "LiveCells and FixedNuclei",
- OverlapCount == 2 & LiveNuclei & FixedNuclei ~ "LiveNuclei and FixedNuclei",
- OverlapCount == 1 & LiveCells ~ "Unique LiveCells",
- OverlapCount == 1 & LiveNuclei ~ "Unique LiveNuclei",
- OverlapCount == 1 & FixedNuclei ~ "Unique FixedNuclei",
- TRUE ~ "Other"
- )
- )
- # Group and count genes by status
- summary_table <- gene_overlap_table %>%
- group_by(Status) %>%
- summarize(UniqueGenes = n(), .groups = "drop")
- # Display the summary table
- print(summary_table)
- ```
2V_04_DEG.Rmd at commit 2e9446e, no license · at the source
Overview
- Laboratory of Glial Biology and Omics Technologies, Institute of Biotechnology of the Czech Academy of Sciences, Vestec, Czech Republic
- Faculty of Science, Charles University, Prague, Czech Republic
- GeneCore Facility, Institute of Biotechnology of the Czech Academy of Sciences, Vestec, Czech Republic
- Department of Cellular Neurophysiology, Institute of Experimental Medicine of the Czech Academy of Sciences, Prague, Czech Republic
- Second Faculty of Medicine, Charles University, Prague, Czech Republic
Abstract
Single-cell transcriptomics has revealed the central role of microglia in brain development, homeostasis, and disease, particularly in the context of neuroinflammation. While single-cell RNA-sequencing enables targeted microglial analysis from fresh tissue, studying these cells in cryopreserved or archival samples remains challenging due to the lack of a protocol for their specific enrichment and RNA-sequencing. In this study, we developed a method for profiling microglial nuclei from fresh-frozen tissue using Smart-seq3xpress. This approach relies on PU.1-based enrichment, made possible by a brief formaldehyde fixation step to preserve the antigen. To ensure compatibility with Smart-seq3xpress, we utilized a Thermolabile Proteinase K treatment to reverse cross-links, thereby maintaining high transcriptomic sensitivity. We benchmarked the method in a mouse model of ischemic stroke, evaluating both technical performance and its ability to capture biologically meaningful microglial states. Compared to standard single-nucleus protocols, our approach yielded higher gene and UMI counts and a greater proportion of coding reads. Transcriptomic profiles closely matched those from whole-cell RNA-sequencing, including the detection of activation markers and diverse microglial subpopulations. This approach enables high-resolution transcriptomic analysis of microglia from fresh-frozen or archival brain samples, overcoming major limitations of single-nucleus RNA sequencing. It broadens access to cellular insights from biobanked material, supporting both basic research and translational studies of neuroinflammatory disease.
Graphical Abstract: A modified Smart-seq3xpress protocol was developed for microglial profiling by combining formaldehyde fixation and PU.1-based nuclei enrichment from fresh-frozen brain tissue. The method yields high gene and UMI counts alongside strong coding coverage, enabling high-resolution characterization of diverse microglial activation states following stroke.
Supplementary Information: The online version contains supplementary material available at 10.1007/
Reproduced under the paper's license (CC BY), from the paper cited above.
Repository
Its files are read in the Code ↔ Paper reader above, with 19 matches between paragraphs and lines of code.
GliaOmicsLab/microglia-sc-snRNAseq
2e9446edb410619736e4773edbeeab4e5d34d5fc, 12 May 2026Availability: 1 check, the latest on 28 September 2026: the link answers
- 28 September 2026: the link answers
18 files
- 0F_colours_orders.R, R, 141 lines
- 0F_general_functions.R, R, 279 lines
- 1DP_00_all_cells_raw_dat
a_to_seurat_merged_integ , R, 503 lines, 2 matchesrated_UMAP.Rmd - 1DP_01_mg_cells_raw_data
_to_seurat_merged_integr , R, 394 lines, 2 matchesated_UMAP.Rmd - 1DP_02_DEG.Rmd, R, 243 lines, 1 match
- 1DP_03_GO.Rmd, R, 114 lines, 1 match
- 1DP_04_CellChat.Rmd, R, 216 lines, 1 match
- 1DP_05_all_cells_LC_FN_r
aw_data_to_seurat_merged , R, 301 lines, 2 matches_integrated_UMAP.Rmd - 1DP_06_library_qc.Rmd, R, 224 lines, 2 matches
- 2V_00_all_cells_UMAP_dot
_plot.Rmd , R, 346 lines, 2 matches - 2V_01_mg_cells_nonstanda
rd_cluster_UMAP_FACS.Rmd , R, 345 lines - 2V_02_mg_cells_UMAP_dot_
plot.Rmd , R, 745 lines, 2 matches - 2V_03_technical_part.Rmd
, R, 510 lines - 2V_04_DEG.Rmd, R, 561 lines, 3 matches
- 2V_05_GO.Rmd, R, 103 lines
- 2V_06_CellChat.Rmd, R, 191 lines, 1 match
- 2V_07_library_qc.Rmd, R, 272 lines
- README.md, Text, 98 lines
The paper's code and data availability statement is in the Data section.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 17 scripts, each with its path and the digest of its content;
- 19 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
Datasets cited
- zenodo:16737457, at Zenodo; found in “Data Availability”
Data Availability
The data that support the findings of this study are publicly available on Zenodo (https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 1, 28 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 9 authors, 6 keywords, 12 MeSH terms, 3 funders, 43 references, 4 RRIDs.
Cite
This paper
Dostalova, D., Abaffy, P., Rohlova, E., Kriska, J., Knotek, T., Tureckova, J., Kirdajova, D., Anderova, M., & Valihrach, L. (2026). Adapted Smart-seq3xpress Facilitates Selective Microglial Transcriptomic Profiling From Frozen Brain Tissue. Cellular and molecular neurobiology, 46(1), 113. https://
BibTeX
@article{dostalova2026ad
author = {Dostalova, Dominika and Abaffy, Pavel and Rohlova, Eva and Kriska, Jan and Knotek, Tomas and Tureckova, Jana and Kirdajova, Denisa and Anderova, Miroslava and Valihrach, Lukas},
title = {{Adapted Smart-seq3xpress Facilitates Selective Microglial Transcriptomic Profiling From Frozen Brain Tissue}},
journal = {Cellular and molecular neurobiology},
year = {2026},
month = may,
volume = {46},
number = {1},
pages = {113},
publisher = {Springer},
issn = {0272-4340},
doi = {10.1007/
url = {https://
pmid = {42133140},
pmcid = {PMC13357468}
}
RIS
TY - JOUR
AU - Dostalova, Dominika
AU - Abaffy, Pavel
AU - Rohlova, Eva
AU - Kriska, Jan
AU - Knotek, Tomas
AU - Tureckova, Jana
AU - Kirdajova, Denisa
AU - Anderova, Miroslava
AU - Valihrach, Lukas
TI - Adapted Smart-seq3xpress Facilitates Selective Microglial Transcriptomic Profiling From Frozen Brain Tissue
T2 - Cellular and molecular neurobiology
J2 - Cell Mol Neurobiol
PY - 2026
DA - 2026/
VL - 46
IS - 1
SP - 113
SN - 0272-4340
PB - Springer
DO - 10.1007/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1007/
"type": "article-journal",
"title": "Adapted Smart-seq3xpress Facilitates Selective Microglial Transcriptomic Profiling From Frozen Brain Tissue",
"container-title": "Cellular and molecular neurobiology",
"author": [
{
"family": "Dostalova",
"given": "Dominika"
},
{
"family": "Abaffy",
"given": "Pavel"
},
{
"family": "Rohlova",
"given": "Eva"
},
{
"family": "Kriska",
"given": "Jan"
},
{
"family": "Knotek",
"given": "Tomas"
},
{
"family": "Tureckova",
"given": "Jana"
},
{
"family": "Kirdajova",
"given": "Denisa"
},
{
"family": "Anderova",
"given": "Miroslava"
},
{
"family": "Valihrach",
"given": "Lukas"
}
],
"container-title-short":
"volume": "46",
"issue": "1",
"page": "113",
"DOI": "10.1007/
"PMID": "42133140",
"PMCID": "PMC13357468",
"ISSN": "0272-4340",
"publisher": "Springer",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
5,
14
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1038/s41593-026-02367-0 [code]
- A reproducible three-dimensional model of human brain tissue to investigate physiological and disease-associated microglia phenotypes.Journal: Nature neuroscienceIn common: reticulate, clusterProfiler, ComplexHeatmap, 8 other tools, cellular / molecular, 3 references
- [2] doi:10.1186/s13059-026-04177-w [code]
- Genomic sequence evolution underlying human neocortical interareal diversification.Journal: Genome biologyIn common: SAMtools, reticulate, ComplexHeatmap, 7 other tools, genetics / omics, mouse, cellular / molecular, 3 references
- [3] doi:10.1038/s42003-026-10957-8 [code]
- Brain defence by the extracellular matrix protein Cochlin.Journal: Communications biologyIn common: SAMtools, reticulate, clusterProfiler, 9 other tools, mouse, cellular / molecular
- [4] doi:10.1016/j.cpblue.2026.100007 [code]
- An integrated single-cell and spatial proteotranscriptomics atlas of fibroblast-driven immunoregulation within the human adult oral cavity.Journal: Cell press blueIn common: SAMtools, reticulate, clusterProfiler, 9 other tools
- [5] doi:10.1038/s41586-026-10512-9 [code]
- Astrocyte glucocorticoid receptor signalling restricts neuronal plasticity.Journal: NatureIn common: SAMtools, clusterProfiler, ComplexHeatmap, 7 other tools, mouse, cellular / molecular, 2 references
- [6] doi:10.1038/s41586-026-10214-2 [code]
- Multidimensional profiling of heterogeneity in supratentorial ependymomas.Journal: NatureIn common: reticulate, clusterProfiler, ComplexHeatmap, 8 other tools, genetics / omics, mouse, 1 reference
- [7] doi:10.1016/j.celrep.2026.117073 [code]
- Single-cell epigenomics uncovers heterochromatin instability and transcription factor dysfunction during mouse brain aging.Journal: Cell reportsIn common: SAMtools, reticulate, clusterProfiler, 8 other tools, genetics / omics, mouse, cellular / molecular
- [8] doi:10.1101/gr.281113.125 [code]
- Single-nucleus multiomic profiling of the aging mouse substantia nigra reveals conserved gene alterations linked to Parkinson's disease.Journal: Genome researchIn common: reticulate, clusterProfiler, ComplexHeatmap, 7 other tools, genetics / omics, mouse, cellular / molecular, 2 references
- [9] doi:10.1038/s41467-026-69944-6 [code]
- Multi-modal dissection of cell-type specific TDP-43 pathology in the motor cortex.Journal: Nature communicationsIn common: SAMtools, clusterProfiler, ComplexHeatmap, 8 other tools, genetics / omics, 1 reference
- [10] doi:10.3390/ijms27104466 [code]
- Uncovering the Key Circuit FOSL2/
FOS/ EGR3/ EGR1, Contributing to the Hyperexcitability of Excitatory Neurons in the Epileptic Temporal Cortex and Hippocampus. Journal: International journal of molecular sciencesIn common: reticulate, clusterProfiler, ComplexHeatmap, 8 other tools, genetics / omics, 1 reference
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 17 scripts, and 19 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:8507660b795030b4…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
