Intrathecal (G<sub>4</sub>C<sub>2</sub>)<sub>149</sub> delivery in C9orf72-deficient mice yields mild motor dysfunction and ALS/FTD pathological hallmarks.
The 2 matches
- [1] § Results › Mild hyperactivity observed in the open field; anxiety remains unchanged ↔ KAR_Acta_Neuro_Comm_v1.13.Rmd, lines 135–180 · score 0.70 · perimeter zone, center zone, open field, episodes, immobile, speed
- [2] § Results › Gait analysis identifies subtle signatures of motor dysfunction ↔ KAR_Acta_Neuro_Comm_v1.13.Rmd, lines 135–180 · score 0.61 · Paw Drag, body mass, Propel, Swing, Stance, Stride
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 · 1,195 lines · 40 KB · CC-BY-4.0 · 2 matches
- ---
- title: "20260620_Plotting_variables_and_groups_v1.12"
- author: "Aaron Haeusler"
- date: "`r Sys.Date()`"
- output: html_document
- ---
- ```{r setup, include=FALSE}
- if (!require("pacman")) install.packages("pacman")
- pacman::p_load(
- readr,
- dplyr,
- ggplot2,
- forcats,
- ggnewscale,
- RColorBrewer,
- reshape2,
- scales
- )
- wd <- getwd()
- data <- read_csv("Combined_Intrathecal_Data.csv")
- # Fix column names for merging (remove any stray spaces)
- colnames(data) <- gsub(" ", "_", colnames(data))
- # Ensure numeric and merge expression columns
- data <- data %>%
- mutate(
- across(c(Expression_12m, Expression_9m, Expression_6m), as.numeric),
- Expression_Merged = coalesce(Expression_12m, Expression_9m, Expression_6m, 0),
- Expression_Merged = ifelse(Treatment %in% c("None", "Control"), 0, Expression_Merged)
- )
- # Calculate quartiles (excluding zero)
- qtiles <- quantile(data$Expression_Merged[data$Expression_Merged > 0], probs = seq(0, 1, 0.25), na.rm = TRUE)
- data <- data %>%
- mutate(
- Expression_Quartile = case_when(
- is.na(Expression_Merged) | Expression_Merged == 0 ~ "0",
- Expression_Merged > 0 & Expression_Merged <= qtiles[2] ~ "Q1",
- Expression_Merged > qtiles[2] & Expression_Merged <= qtiles[3] ~ "Q2",
- Expression_Merged > qtiles[3] & Expression_Merged <= qtiles[4] ~ "Q3",
- Expression_Merged > qtiles[4] ~ "Q4"
- ),
- Expression_Quartile = factor(Expression_Quartile, levels = c("0", "Q1", "Q2", "Q3", "Q4"), ordered = TRUE)
- )
- # Set up your grayscale palette
- grayscale_pal <- c(
- "0" = "#FFFFFF", # white
- "Q1" = "#CECECE", # very light gray
- "Q2" = "#ABABAB", # light gray
- "Q3" = "#7D7D7D", # medium gray
- "Q4" = "#222222" # near black
- )
- # Set factors for better color/shape control
- data <- data %>%
- mutate(
- Genotype = factor(Genotype, levels = c("WT", "Het", "Homo")),
- Treatment = factor(Treatment, levels = c("Control", "Repeats", "None")),
- Sex = factor(Sex, levels = c("Female", "Male")),
- Condition = as.factor(Condition)
- )
- data <- data %>%
- mutate(
- distribution = case_when(
- Unit == "LBF" ~ "gaussian",
- Unit == "cm" ~ "gaussian",
- Unit == "coefficient" ~ "gaussian",
- Unit == "degrees" ~ "gaussian",
- Unit == "metric" ~ "gaussian",
- Unit == "percentage" ~ "gaussian",
- Unit == "cm_squared" ~ "Gamma",
- Unit == "cm_squared_per_sec" ~ "Gamma",
- Unit == "meters" ~ "Gamma",
- Unit == "meters_per_second" ~ "Gamma",
- Unit == "steps_per_sec" ~ "Gamma",
- Unit == "seconds" ~ "Gamma",
- Unit == "ratio" ~ "Gamma",
- Unit == "total_degrees" ~ "Gamma",
- Unit == "count" ~ "poisson",
- Unit == "mV" ~ "gaussian",
- Unit == "mV*ms" ~ "Gamma",
- Unit == "ms" ~ "gaussian",
- Unit == "mm" ~ "gaussian",
- StatsVariable == "All latency variables" ~ "Gamma",
- all(Value == floor(Value), na.rm = TRUE) ~ "poisson",
- TRUE ~ "gaussian"
- )
- )
- library(dplyr)
- # 1. Split Digigait from all other experiments
- digigait <- data %>% filter(Exp == "Digigait")
- data_other <- data %>% filter(Exp != "Digigait")
- # 2. Aggregate Digigait Left/Right by Fore/Hind, rename Side as Both
- digigait_agg <- digigait %>%
- filter(Side %in% c("Left", "Right"), Limb %in% c("Fore", "Hind")) %>%
- group_by(across(-c(Value, Stdev, SEM, Side, Condition))) %>%
- summarise(
- Value = mean(Value, na.rm = TRUE),
- Stdev = sd(Value, na.rm = TRUE),
- SEM = sd(Value, na.rm = TRUE) / sqrt(sum(!is.na(Value))),
- .groups = "drop"
- ) %>%
- mutate(Side = "Both",
- Condition = Limb
- )
- # 3. Remove original Left/Right Fore/Hind Digigait rows
- digigait_rest <- digigait %>%
- filter(!(Side %in% c("Left", "Right") & Limb %in% c("Fore", "Hind")))
- # 4. Combine everything back together
- data_combined <- bind_rows(data_other, digigait_rest, digigait_agg)
- # 5. (optional) Arrange for easy viewing
- data <- data_combined %>%
- arrange(Ear_Tag, Time_month, Exp, Limb, Side)
- # Now data_combined is your updated dataset
- df <- data
- write_csv(data, "combined_intrathecal_data_ave_digigait.csv")
- ```
- ``` {r publication_boxplots, include=FALSE}
- library(dplyr)
- library(ggplot2)
- library(ggnewscale)
- library(purrr)
- library(RColorBrewer)
- library(scales)
- library(tibble)
- df <- data # Replace with your actual data object name
- # ---- Subset Table ----
- subset_table <- tribble(
- ~Exp, ~Time_month, ~Condition, ~StatsVariable,
- "Grip", 12, NA, "Grip_Strength",
- "CMAP", 12, "Ankle", "Amplitude",
- "CMAP", 12, "Hip", "Area_Under_Curve",
- "OpenField", 10, NA, "Total_distance_travelled",
- "OpenField", 10, NA, "Average_speed",
- "OpenField", 10, NA, "Total_time_mobile",
- "OpenField", 10, NA, "Total_immobile episodes",
- "OpenField", 10, NA, "Average_speed_in_the_Perimeter_zone",
- "OpenField", 10, NA, "Time_in_the_Center_zone",
- "OpenField", 10, NA, "Distance_travelled_in_the_Perimeter_zone",
- "Rotarod", 12, NA, "Latency_to_Fall",
- "Body_mass", 12, NA, "Weight_grams",
- "Digigait", 12, "Hind", "Stride",
- "Digigait", 12, "Hind", "Swing",
- "Digigait", 12, "Hind", "Stance",
- "Digigait", 12, "Hind", "Stance/Swing",
- "Digigait", 12, "Hind", "PawDrag",
- "Digigait", 12, "Hind", "PercentSharedStance",
- "Digigait", 12, "Hind", "AbsolutePawAngle",
- "Digigait", 12, "Hind", "Propel",
- "GA", 12, NA, "Normalized_Area",
- "GP", 12, NA, "Normalized_Area",
- "GR", 12, NA, "Normalized_Area",
- "GFAP", 12, NA, "Normalized_Area",
- "Iba1", 12, NA, "Normalized_Area",
- "NeuN", 12, NA, "Normalized_Area",
- "pTDP43", 12, NA, "Normalized_Area",
- "TDP_CE", 12, NA, "Sort1_CE_normalized",
- "NeuN_count", 12, NA, "Mean_Total_Count",
- "spleen", 12, NA, "Weight_mg",
- )
- # ---- Subset and Clean ----
- plot_data <- pmap_dfr(subset_table, function(Exp, Time_month, Condition, StatsVariable) {
- df %>%
- filter(
- Exp == !!Exp,
- Time_month == !!Time_month,
- StatsVariable == !!StatsVariable,
- (is.na(Condition) & is.na(.data$Condition)) |
- (!is.na(Condition) & Condition == .data$Condition),
- !(Exp == "Digigait" & Limb == "Fore")
- )
- }) %>%
- mutate(
- Treatment_Combined = ifelse(Treatment %in% c("None", "Control"), "Control", "Repeats"),
- Treatment_Shape = factor(Treatment, levels = c("None", "Control", "Repeats")),
- Genotype = factor(Genotype, levels = c("WT", "Het", "Homo")),
- Sex = factor(Sex, levels = c("Female", "Male")),
- Genotype_Tx = factor(
- interaction(Genotype, Treatment_Combined, sep = "_"),
- levels = c("WT_Control", "Het_Control", "Homo_Control",
- "WT_Repeats", "Het_Repeats", "Homo_Repeats")
- ),
- facet_id = paste(Exp, Condition, StatsVariable, sep = "_")
- )
- # ---- Split Body_mass by Sex ----
- body_split <- plot_data %>%
- filter(Exp == "Body_mass") %>%
- mutate(facet_id = paste0("Body_mass_", Sex, "_Weight_grams"))
- plot_data <- plot_data %>%
- filter(!(Exp == "Body_mass" & StatsVariable == "Weight_grams")) %>%
- bind_rows(body_split)
- # ---- Additional filter ----
- imaging_exps <- c("GA", "GP", "GR", "GFAP", "Iba1", "NeuN", "pTDP43", "NeuN_count", "TDP_CE")
- plot_data <- plot_data %>%
- filter(
- !(Exp %in% imaging_exps & Genotype == "Het" & Treatment_Combined == "Repeats") |
- (Exp %in% imaging_exps & Genotype == "Het" & Treatment_Combined == "Repeats" &
- Expression_Quartile %in% c("Q2", "Q3"))
- )
- # ---- Facet Fillers ----
- facet_combinations <- plot_data %>%
- distinct(facet_id, Exp, Condition, StatsVariable)
- num_facets <- nrow(facet_combinations)
- num_per_page <- 12
- num_pages <- ceiling(num_facets / num_per_page)
- fillers_needed <- (num_pages * num_per_page) - num_facets
- if (fillers_needed > 0) {
- filler_data <- tibble(
- facet_id = paste0("filler_", seq_len(fillers_needed)),
- Exp = "Filler", Condition = NA, StatsVariable = "Empty",
- Genotype_Tx = factor(NA, levels = levels(plot_data$Genotype_Tx)),
- Value = NA
- )
- facet_combinations <- bind_rows(facet_combinations, filler_data)
- plot_data <- bind_rows(plot_data, filler_data)
- }
- # ---- Aesthetics ----
- sex_colors <- c("Female" = "red", "Male" = "blue")
- shape_values <- c("None" = 22, "Control" = 23, "Repeats" = 21)
- custom_fill_colors <- c(
- "WT_Repeats" = "#f15b60", # red
- "Het_Repeats" = "#f79151", # orange
- "Homo_Repeats" = "#ffcb38", # yellow
- "WT_Control" = "#00b04f", # green
- "Het_Control" = "#109ab3", # blue
- "Homo_Control" = "#8a77aa" # purple
- )
- # ---- Plot Loop ----
- pdf("Subset_Boxplot_GenoTx_SunsetOceanOrchid_3x4_Fillers.pdf", width = 5.5, height = 7)
- for (page in seq_len(num_pages)) {
- start_idx <- (page - 1) * num_per_page + 1
- end_idx <- min(page * num_per_page, nrow(facet_combinations))
- page_facets <- facet_combinations$facet_id[start_idx:end_idx]
- pd <- plot_data %>% filter(facet_id %in% page_facets) %>% droplevels()
- p <- ggplot(pd, aes(
- x = Genotype_Tx,
- y = Value,
- group = Genotype_Tx,
- fill = Genotype_Tx
- )) +
- geom_boxplot(
- position = position_dodge(width = 0.8),
- outlier.shape = NA,
- alpha = 1,
- width = 0.65
- ) +
- scale_fill_manual(values = custom_fill_colors, name = "Genotype × Treatment") +
- ggnewscale::new_scale_fill() +
- geom_jitter(
- aes(fill = Sex, shape = Treatment_Shape),
- color = "black", size = 1, stroke = 0.5, alpha = 0.85,
- position = position_jitter(width = 0.18, height = 0)
- ) +
- scale_fill_manual(values = sex_colors, name = "Sex") +
- scale_shape_manual(values = shape_values, name = "Original Treatment") +
- scale_x_discrete(drop = FALSE, na.translate = FALSE) +
- ylab("Value") +
- xlab("Genotype × Treatment Group") +
- facet_wrap(~ facet_id, scales = "free_y", ncol = 3, nrow = 4) +
- theme_classic(base_size = 8) +
- theme(
- strip.background = element_rect(fill = "grey90", color = "black"),
- strip.text = element_text(face = "bold", size = 4),
- axis.text.x = element_text(angle = 45, hjust = 1),
- legend.position = "right",
- axis.ticks.y = element_line(size = 0.3)
- )
- print(p)
- }
- dev.off()
- ```
- ```{r scatter_expression_correlations_publication, include=FALSE}
- ### -----------------------------------------------------------
- ### FACETED SCATTER PLOT WITH R², p, p_adj • 4×6 PAGE LAYOUT
- ### Genotype × Treatment Coloring (Repeats Only) + Fillers
- ### -----------------------------------------------------------
- library(dplyr)
- library(ggplot2)
- library(broom)
- library(purrr)
- library(tidyr)
- # ---- Subset and Clean ----
- plot_data <- pmap_dfr(subset_table, function(Exp, Time_month, Condition, StatsVariable) {
- df %>%
- filter(
- Exp == !!Exp,
- Time_month == !!Time_month,
- StatsVariable == !!StatsVariable,
- (is.na(Condition) & is.na(.data$Condition)) |
- (!is.na(Condition) & Condition == .data$Condition),
- !(Exp == "Digigait" & Limb == "Fore")
- )
- }) %>%
- mutate(
- Treatment_Combined = ifelse(Treatment %in% c("None", "Control"), "Control", "Repeats"),
- Treatment_Shape = factor(Treatment, levels = c("None", "Control", "Repeats")),
- Genotype = factor(Genotype, levels = c("WT", "Het", "Homo")),
- Sex = factor(Sex, levels = c("Female", "Male")),
- Genotype_Tx = factor(
- interaction(Genotype, Treatment_Combined, sep = "_"),
- levels = c("WT_Control", "Het_Control", "Homo_Control",
- "WT_Repeats", "Het_Repeats", "Homo_Repeats")
- ),
- facet_id = paste(Exp, Condition, StatsVariable, sep = "_")
- )
- # ---- Split Body_mass by Sex ----
- body_split <- plot_data %>%
- filter(Exp == "Body_mass") %>%
- mutate(facet_id = paste0("Body_mass_", Sex, "_Weight_grams"))
- plot_data <- plot_data %>%
- filter(!(Exp == "Body_mass" & StatsVariable == "Weight_grams")) %>%
- bind_rows(body_split)
- ### -----------------------------------------------------------
- ### 1. Prepare data with Genotype × Treatment factor
- ### -----------------------------------------------------------
- scatter_data <- plot_data %>%
- mutate(
- Treatment_Combined = ifelse(Treatment %in% c("None", "Control"),
- "Control", "Repeats"),
- Genotype_Tx = factor(
- interaction(Genotype, Treatment_Combined, sep = "_"),
- levels = c("WT_Control","Het_Control","Homo_Control",
- "WT_Repeats","Het_Repeats","Homo_Repeats")
- )
- ) %>%
- filter(
- Treatment == "Repeats",
- !is.na(Expression_Merged),
- Expression_Merged > 0,
- !is.na(Value)
- ) %>%
- mutate(
- Expression = as.numeric(Expression_Merged),
- Expression_log2 = log2(Expression_Merged)
- )
- ### -----------------------------------------------------------
- ### 2. Compute LM stats per facet (R², p, FDR)
- ### -----------------------------------------------------------
- facet_stats <- scatter_data %>%
- group_by(facet_id) %>%
- do({
- m <- lm(Value ~ Expression_log2, data = .)
- tibble(
- r2 = summary(m)$r.squared,
- p = glance(m)$p.value
- )
- }) %>%
- ungroup() %>%
- mutate(
- p_adj = p.adjust(p, method = "BH"),
- label = sprintf("R² = %.2f\np = %.3g\nFDR = %.3g",
- r2, p, p_adj)
- )
- scatter_plot_data <- scatter_data %>%
- left_join(facet_stats, by = "facet_id")
- ### -----------------------------------------------------------
- ### 3. Pagination + Fillers (4×6 = 24 plots per page)
- ### -----------------------------------------------------------
- facets <- sort(unique(scatter_plot_data$facet_id))
- n_per_page <- 24 # 4 columns × 6 rows
- n_pages <- ceiling(length(facets) / n_per_page)
- # Add filler facets to fill last page to 24 slots
- fillers_needed <- n_pages * n_per_page - length(facets)
- if (fillers_needed > 0) {
- filler_ids <- paste0("Filler_", seq_len(fillers_needed))
- # Create filler entries with NA values
- filler_df <- tibble(
- facet_id = rep(filler_ids, each = 1),
- Value = NA,
- Expression_log2 = NA,
- Genotype_Tx = factor(NA, levels = levels(scatter_plot_data$Genotype_Tx)),
- label = ""
- )
- facets <- c(facets, filler_ids)
- }
- ### -----------------------------------------------------------
- ### 4. Genotype × Treatment colors
- ### -----------------------------------------------------------
- genoTx_colors <- c(
- "WT_Repeats" = "#f15b60",
- "Het_Repeats" = "#f79151",
- "Homo_Repeats" = "#ffcb38",
- "WT_Control" = "#00b04f",
- "Het_Control" = "#109ab3",
- "Homo_Control" = "#8a77aa"
- )
- ### -----------------------------------------------------------
- ### 5. PDF loop (each page is 4×6 facets)
- ### -----------------------------------------------------------
- pdf("GenotypeTx_vs_Expression_log2_FacetedScatter_Paginated.pdf",
- width = 9, height = 10)
- for (page in seq_len(n_pages)) {
- start <- (page - 1) * n_per_page + 1
- end <- page * n_per_page
- these_facets <- facets[start:end]
- page_data <- scatter_plot_data %>%
- filter(facet_id %in% these_facets) %>%
- bind_rows(filler_df %>% filter(facet_id %in% these_facets)) %>%
- mutate(facet_id = factor(facet_id, levels = these_facets))
- p <- ggplot(page_data,
- aes(x = Expression_log2, y = Value)) +
- geom_point(
- aes(color = Genotype_Tx),
- size = 1.6, alpha = 0.85, na.rm = TRUE
- ) +
- geom_smooth(
- method = "lm", se = FALSE,
- color = "black", linewidth = 0.6, na.rm = TRUE
- ) +
- geom_text(
- aes(label = label),
- x = -Inf, y = Inf,
- hjust = -0.1, vjust = 1.1,
- size = 3, color = "black",
- lineheight = 0.9
- ) +
- facet_wrap(~ facet_id, ncol = 4, nrow = 6, scales = "free_y") +
- scale_color_manual(
- values = genoTx_colors,
- name = "Genotype × Treatment",
- na.translate = FALSE
- ) +
- scale_x_continuous(
- breaks = pretty(range(scatter_plot_data$Expression_log2), 5),
- labels = function(x) round(2^x, 1),
- name = "Expression (raw units, log2 scale)"
- ) +
- labs(
- y = "Phenotype Value",
- title = paste0("Genotype × Treatment Effects vs log2(Expression) — Page ", page)
- ) +
- theme_bw(base_size = 6) +
- theme(
- plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
- strip.background = element_rect(fill = "white"),
- strip.text = element_text(face = "bold", size = 5),
- legend.position = "bottom",
- panel.grid = element_blank(),
- panel.spacing = unit(1.1, "lines")
- )
- print(p)
- }
- dev.off()
- ```
- ```{r correlation_matrix_dot_pot_publication, include=FALSE}
- library(dplyr)
- library(tidyr)
- library(ggplot2)
- library(reshape2)
- library(purrr)
- df <- data # Replace with your actual data object name
- # ---- Subset Table ----
- subset_table <- tribble(
- ~Exp, ~Time_month, ~Condition, ~StatsVariable,
- "Grip", 12, NA, "Grip_Strength",
- "CMAP", 12, "Ankle", "Amplitude",
- #"CMAP", 12, "Hip", "Area_Under_Curve",
- #"OpenField", 10, NA, "Total_distance_travelled",
- "OpenField", 10, NA, "Average_speed",
- #"OpenField", 10, NA, "Total_time_mobile",
- #"OpenField", 10, NA, "Total_immobile episodes",
- #"OpenField", 10, NA, "Average_speed_in_the_Perimeter_zone",
- "OpenField", 10, NA, "Time_in_the_Center_zone",
- #"OpenField", 10, NA, "Distance_travelled_in_the_Perimeter_zone",
- "Rotarod", 12, NA, "Latency_to_Fall",
- "Body_mass", 12, NA, "Weight_grams",
- "Digigait", 12, "Hind", "Stride",
- #"Digigait", 12, "Hind", "Swing",
- "Digigait", 12, "Hind", "Stance",
- #"Digigait", 12, "Hind", "StanceOverSwing",
- #"Digigait", 12, "Hind", "PawDrag",
- #"Digigait", 12, "Hind", "PercentSharedStance",
- #"Digigait", 12, "Hind", "AbsolutePawAngle",
- "GA", 12, NA, "Normalized_Area",
- "GP", 12, NA, "Normalized_Area",
- "GR", 12, NA, "Normalized_Area",
- "GFAP", 12, NA, "Normalized_Area",
- "Iba1", 12, NA, "Normalized_Area",
- "NeuN", 12, NA, "Normalized_Area",
- #"pTDP43", 12, NA, "Normalized_Area",
- "TDP_CE", 12, NA, "Sort1_CE_normalized",
- "NeuN_count", 12, NA, "Mean_Total_Count",
- #"NeuN_count", 12, NA, "Mean_Area_um2",
- )
- # ---- Subset and Clean ----
- plot_data <- pmap_dfr(subset_table, function(Exp, Time_month, Condition, StatsVariable) {
- df %>%
- filter(
- Exp == !!Exp,
- Time_month == !!Time_month,
- StatsVariable == !!StatsVariable,
- (is.na(Condition) & is.na(.data$Condition)) |
- (!is.na(Condition) & Condition == .data$Condition),
- !(Exp == "Digigait" & Limb == "Fore")
- )
- }) %>%
- mutate(
- Treatment_Combined = ifelse(Treatment %in% c("None", "Control"), "Control", "Repeats"),
- Treatment_Shape = factor(Treatment, levels = c("None", "Control", "Repeats")),
- Genotype = factor(Genotype, levels = c("WT", "Het", "Homo")),
- Sex = factor(Sex, levels = c("Female", "Male")),
- Genotype_Tx = factor(
- interaction(Genotype, Treatment_Combined, sep = "_"),
- levels = c("WT_Control", "Het_Control", "Homo_Control",
- "WT_Repeats", "Het_Repeats", "Homo_Repeats")
- ),
- facet_id = paste(Exp, Condition, StatsVariable, sep = "_")
- )
- #---------------------------------------------------------------#
- # 1. Summarize each Exp + StatsVariable to one value per mouse
- #---------------------------------------------------------------#
- exp_summary <- plot_data %>%
- mutate(Expression_Merged = ifelse(Treatment != "Repeats", NA, Expression_Merged)) %>%
- group_by(Ear_Tag, Exp, StatsVariable) %>%
- summarise(Exp_Value = mean(Value, na.rm = TRUE), .groups = "drop") %>%
- mutate(ExpVar = paste(Exp, StatsVariable, sep = "_")) %>%
- select(Ear_Tag, ExpVar, Exp_Value) %>%
- pivot_wider(
- names_from = ExpVar,
- values_from = Exp_Value
- )
- #---------------------------------------------------------------#
- # 2. Attach Expression_Merged directly (not summarized)
- #---------------------------------------------------------------#
- expr_values <- plot_data %>%
- distinct(Ear_Tag, Expression_Merged)
- combined_df <- exp_summary %>%
- left_join(expr_values, by = "Ear_Tag")
- #---------------------------------------------------------------#
- # 3. Prepare numeric vars (drop ID, keep sufficient non-NA vars)
- #---------------------------------------------------------------#
- numeric_vars <- combined_df %>%
- select(where(is.numeric)) %>%
- select(-Ear_Tag) %>% # ⭐ REMOVE EAR_TAG ⭐
- select(where(~ sum(!is.na(.)) >= 3))
- #---------------------------------------------------------------#
- # 4. Correlation + P-values
- #---------------------------------------------------------------#
- corr_mat <- cor(numeric_vars, use = "pairwise.complete.obs", method = "pearson")
- p_mat <- matrix(NA, ncol = ncol(numeric_vars), nrow = ncol(numeric_vars))
- colnames(p_mat) <- rownames(p_mat) <- colnames(numeric_vars)
- for (i in seq_len(ncol(numeric_vars))) {
- for (j in seq_len(ncol(numeric_vars))) {
- x <- numeric_vars[[i]]
- y <- numeric_vars[[j]]
- if (sum(complete.cases(x, y)) >= 3) {
- p_mat[i, j] <- cor.test(x, y)$p.value
- }
- }
- }
- # Adjusted p-values
- padj_mat <- matrix(
- p.adjust(as.vector(p_mat), method = "BH"),
- nrow = ncol(numeric_vars),
- dimnames = list(colnames(numeric_vars), colnames(numeric_vars))
- )
- #---------------------------------------------------------------#
- # 5. Melt matrices + hierarchical order
- #---------------------------------------------------------------#
- hc <- hclust(dist(corr_mat))
- ord <- hc$order
- corr_ord <- corr_mat[ord, ord]
- padj_ord <- padj_mat[ord, ord]
- df_plot <- reshape2::melt(corr_ord) %>%
- rename(Var1 = Var1, Var2 = Var2, cor = value) %>%
- mutate(
- padj = as.vector(padj_ord),
- size_value = -log10(padj), # ⭐ new transform
- size_value = pmin(size_value, 3) # ⭐ optional: cap extremes
- ) %>%
- filter(as.numeric(Var1) < as.numeric(Var2)) %>%
- filter(!is.na(cor))
- #---------------------------------------------------------------#
- # 6. Dot plot
- #---------------------------------------------------------------#
- p <- ggplot(df_plot, aes(Var1, Var2, color = cor, size = size_value)) +
- geom_point(alpha = 0.9) +
- scale_color_gradient2(
- low = "#b2182b",
- mid = "#f7f7f7",
- high = "#1f78b4",
- midpoint = 0,
- limits = c(-1, 1),
- name = "Correlation"
- ) +
- scale_size(
- range = c(2, 10),
- name = expression("-log"[10]*"(adj p)"),
- limits = c(0, 5) # explicitly bound scale
- ) +
- coord_fixed() +
- labs(title = "Correlation Matrix Across Experiment × Variable + Expression_Merged") +
- theme_minimal(base_size = 16) +
- theme(
- axis.title = element_blank(),
- axis.text.x = element_text(angle = 45, hjust = 1),
- axis.text.y = element_text(size = 12),
- panel.grid.major = element_line(color = "gray85", linewidth = 0.3),
- plot.title = element_text(size = 20, face = "bold", hjust = 0.5)
- )
- #---------------------------------------------------------------#
- # 7. Export as PDF
- #---------------------------------------------------------------#
- ggsave(
- filename = "correlation_matrix_experiment_variable_pairs.pdf",
- plot = p,
- width = 9,
- height = 9,
- units = "in",
- dpi = 300
- )
- ```
- ```{r plot_signifcant_correlations_publication,include=FALSE}
- ### -----------------------------------------------------------
- ### SIGNIFICANT PHENOTYPE–PHENOTYPE SCATTER PLOTS (R²-based)
- ### Paginated 4×6 Faceting + Fillers • Colored by Genotype × Treatment
- ### -----------------------------------------------------------
- library(dplyr)
- library(ggplot2)
- library(broom)
- library(purrr)
- library(tidyr)
- alpha <- 0.05 # FDR significance cutoff
- ### -----------------------------------------------------------
- ### 1. Identify significant NON-expression pairs
- ### -----------------------------------------------------------
- sig_pairs <- df_plot %>%
- filter(padj < alpha) %>%
- filter(!grepl("Expression", Var1),
- !grepl("Expression", Var2)) %>%
- select(Var1, Var2, cor, padj)
- if (nrow(sig_pairs) == 0) stop("No significant phenotype–phenotype correlations found.")
- ### -----------------------------------------------------------
- ### 2. Build phenotype matrix with Genotype × Treatment mapping
- ### -----------------------------------------------------------
- geno_tx_map <- plot_data %>%
- mutate(
- Treatment_Combined = ifelse(Treatment %in% c("None", "Control"), "Control", "Repeats"),
- Genotype_Tx = factor(
- interaction(Genotype, Treatment_Combined, sep = "_"),
- levels = c("WT_Control", "Het_Control", "Homo_Control",
- "WT_Repeats", "Het_Repeats", "Homo_Repeats")
- )
- ) %>%
- distinct(Ear_Tag, Genotype_Tx)
- scatter_wide <- exp_summary %>%
- left_join(geno_tx_map, by = "Ear_Tag")
- ### -----------------------------------------------------------
- ### 3. Build long format for each significant pair (with SAFETY CHECKS)
- ### -----------------------------------------------------------
- scatter_list <- list()
- for (i in seq_len(nrow(sig_pairs))) {
- v1 <- sig_pairs$Var1[i]
- v2 <- sig_pairs$Var2[i]
- # safety: skip comparisons whose variables are missing
- if (!(v1 %in% colnames(scatter_wide)) | !(v2 %in% colnames(scatter_wide))) {
- message("Skipping pair (missing column): ", v1, " -- ", v2)
- next
- }
- tmp <- scatter_wide %>%
- select(Ear_Tag, Genotype_Tx, all_of(v1), all_of(v2)) %>%
- rename(Value_x = all_of(v1),
- Value_y = all_of(v2)) %>%
- filter(!is.na(Value_x) & !is.na(Value_y)) %>%
- mutate(
- Var1 = v1,
- Var2 = v2,
- cor_original = sig_pairs$cor[i], padj_original = sig_pairs$padj[i], facet_id = paste(v1, "vs", v2)
- )
- scatter_list[[length(scatter_list) + 1]] <- tmp
- }
- scatter_df <- bind_rows(scatter_list)
- ### -----------------------------------------------------------
- ### 4. Compute R² per facet, but use original FDR from df_plot
- ### -----------------------------------------------------------
- pair_stats <- scatter_df %>%
- group_by(facet_id) %>%
- do({
- m <- lm(Value_y ~ Value_x, data = .)
- tibble(
- r2 = summary(m)$r.squared,
- p = glance(m)$p.value,
- cor_original = unique(.$cor_original),
- padj_original = unique(.$padj_original)
- )
- }) %>%
- ungroup() %>%
- mutate(
- label = sprintf(
- "R² = %.2f\np = %.3g\nFDR = %.3g",
- r2, p, padj_original
- )
- )
- scatter_df <- left_join(scatter_df, pair_stats, by = "facet_id")
- ### -----------------------------------------------------------
- ### 5. Genotype × Treatment Colors
- ### -----------------------------------------------------------
- genoTx_colors <- c(
- "WT_Repeats" = "#f15b60",
- "Het_Repeats" = "#f79151",
- "Homo_Repeats" = "#ffcb38",
- "WT_Control" = "#00b04f",
- "Het_Control" = "#109ab3",
- "Homo_Control" = "#8a77aa"
- )
- ### -----------------------------------------------------------
- ### 6. PAGINATION + FILLERS (4×6 layout)
- ### -----------------------------------------------------------
- facet_ids <- unique(scatter_df$facet_id)
- n_per_page <- 24 # 4 columns × 6 rows
- n_pages <- ceiling(length(facet_ids) / n_per_page)
- # filler facets to complete the last page
- fillers_needed <- n_pages * n_per_page - length(facet_ids)
- filler_df <- tibble()
- if (fillers_needed > 0) {
- filler_ids <- paste0("Filler_", seq_len(fillers_needed))
- filler_df <- tibble(
- facet_id = filler_ids,
- Value_x = NA,
- Value_y = NA,
- Genotype_Tx = factor(NA, levels = levels(scatter_df$Genotype_Tx)),
- label = ""
- )
- facet_ids <- c(facet_ids, filler_ids)
- }
- ### -----------------------------------------------------------
- ### 7. PDF output (each page is 4×6)
- ### -----------------------------------------------------------
- pdf("Significant_PhenotypePhenotype_ScatterPlots_R2_GenoTx_Paginated.pdf",
- width = 9, height = 10.5)
- for (page in seq_len(n_pages)) {
- start <- (page - 1) * n_per_page + 1
- end <- page * n_per_page
- these_facets <- facet_ids[start:end]
- page_data <- scatter_df %>%
- filter(facet_id %in% these_facets) %>%
- bind_rows(filler_df %>% filter(facet_id %in% these_facets)) %>%
- mutate(facet_id = factor(facet_id, levels = these_facets))
- p_page <- ggplot(page_data, aes(x = Value_x, y = Value_y)) +
- geom_point(aes(color = Genotype_Tx),
- size = 1.8, alpha = 0.85, na.rm = TRUE) +
- geom_smooth(method = "lm",
- se = FALSE,
- color = "black",
- linewidth = 0.7,
- na.rm = TRUE) +
- geom_text(
- aes(label = label),
- x = -Inf, y = Inf,
- hjust = -0.1, vjust = 1.2,
- size = 3,
- lineheight = 0.9,
- color = "black"
- ) +
- facet_wrap(~ facet_id, ncol = 4, nrow = 6, scales = "free") +
- scale_color_manual(
- name = "Genotype × Treatment",
- values = genoTx_colors,
- na.translate = FALSE
- ) +
- labs(
- title = paste("Significant Phenotype–Phenotype Scatter Plots (Page", page, ")"),
- x = "Phenotype A",
- y = "Phenotype B"
- ) +
- theme_bw(base_size = 6) +
- theme(
- plot.title = element_text(size = 14, face = "bold", hjust = 0.5),
- strip.background = element_rect(fill = "white", color = "black"),
- strip.text = element_text(size = 5, face = "bold"),
- legend.position = "bottom",
- panel.grid = element_blank()
- )
- print(p_page)
- }
- dev.off()
- ```
- ``` {r select_publication_boxplots_over_time}
- library(dplyr)
- library(ggplot2)
- library(ggnewscale)
- library(tibble)
- # --- Set parameters
- target_exps <- c("Iba1", "GR", "GP", "GFAP", "NeuN", "GA", "TDP_CE")
- target_stats <- c("Normalized_Area", "Sort1_CE_normalized")
- facet_ids_expected <- expand.grid(Exp = target_exps, StatsVariable = target_stats) %>%
- mutate(facet_id = paste(Exp, StatsVariable, sep = "_")) %>%
- pull(facet_id)
- # --- Filter + format base data
- plot_data <- data %>%
- filter(
- Exp %in% target_exps,
- Genotype == "Het",
- StatsVariable %in% target_stats
- ) %>%
- mutate(
- Treatment_Combined = ifelse(Treatment %in% c("None", "Control"), "Control", "Repeats"),
- Genotype_Tx = factor(interaction(Genotype, Treatment_Combined, sep = "_"),
- levels = c("Het_Control", "Het_Repeats")),
- Treatment_Shape = factor(Treatment, levels = c("None", "Control", "Repeats")),
- Sex = factor(Sex, levels = c("Female", "Male")),
- Time_month = factor(Time_month, levels = sort(unique(Time_month))),
- facet_id = paste(Exp, StatsVariable, sep = "_")
- ) %>%
- # ---- NEW FILTER: Keep only Het + Repeats imaging with Expression_Merged between 30–630 ----
- filter(
- # Keep ALL non-imaging OR non-Repeats rows
- !(Exp %in% imaging_exps & Treatment_Combined == "Repeats") |
- # Apply the 30–630 filter *only* for imaging × Repeats × Het rows
- (Exp %in% imaging_exps &
- Treatment_Combined == "Repeats" &
- Expression_Merged >= 30 &
- Expression_Merged <= 630)
- )
- # --- Fill in missing facets to ensure 3x4 layout
- existing_facets <- unique(plot_data$facet_id)
- missing_facets <- setdiff(facet_ids_expected, existing_facets)
- if (length(missing_facets) > 0) {
- filler_data <- tibble(
- Exp = gsub("_.*", "", missing_facets),
- StatsVariable = gsub(".*_", "", missing_facets),
- facet_id = missing_facets,
- Time_month = factor(NA, levels = levels(plot_data$Time_month)),
- Value = NA,
- Genotype_Tx = factor(NA, levels = c("Het_Control", "Het_Repeats")),
- Treatment_Shape = NA,
- Sex = NA
- )
- plot_data <- bind_rows(plot_data, filler_data)
- }
- # --- Add additional fillers to reach 12 panels (3x4)
- total_panels <- 12
- current_panels <- length(unique(plot_data$facet_id))
- if (current_panels < total_panels) {
- extra_fillers <- tibble(
- Exp = "Filler",
- StatsVariable = "Empty",
- facet_id = paste0("filler_", seq_len(total_panels - current_panels)),
- Time_month = factor(NA, levels = levels(plot_data$Time_month)),
- Value = NA,
- Genotype_Tx = factor(NA, levels = c("Het_Control", "Het_Repeats")),
- Treatment_Shape = NA,
- Sex = NA
- )
- plot_data <- bind_rows(plot_data, extra_fillers)
- }
- # --- Aesthetics
- custom_fill_colors <- c("Het_Control" = "#109ab3", "Het_Repeats" = "#f79151")
- sex_colors <- c("Female" = "red", "Male" = "blue")
- shape_values <- c("None" = 22, "Control" = 23, "Repeats" = 21)
- plot_data <- plot_data %>%
- mutate(
- facet_id = case_when(
- facet_id == "Iba1_Normalized_Area" ~ "Iba1\nNormalized\nArea",
- facet_id == "Iba1_Normalized_Count" ~ "Iba1\nNormalized\nCount",
- facet_id == "GR_Normalized_Area" ~ "GR\nNormalized\nArea",
- facet_id == "GR_Normalized_Count" ~ "GR\nNormalized\nCount",
- facet_id == "GFAP_Normalized_Area" ~ "GFAP\nNormalized\nArea",
- facet_id == "GFAP_Normalized_Count" ~ "GFAP\nNormalized\nCount",
- TRUE ~ facet_id
- )
- )
- # --- Plot
- pdf("Iba1_GR_GFAP_Het_AcrossTime_FIXED_3x4.pdf", width = 7, height = 9)
- p <- ggplot(plot_data, aes(
- x = Time_month,
- y = Value,
- fill = Genotype_Tx
- )) +
- geom_boxplot(
- aes(group = interaction(Time_month, Genotype_Tx)),
- position = position_dodge2(width = 0.75, preserve = "single"),
- outlier.shape = NA,
- width = 1,
- alpha = 0.9
- ) +
- scale_fill_manual(values = custom_fill_colors, name = "Genotype × Treatment") +
- ggnewscale::new_scale_fill() +
- geom_jitter(
- aes(
- fill = Sex,
- shape = Treatment_Shape,
- group = interaction(Time_month, Genotype_Tx)
- ),
- color = "black",
- size = 1.5,
- stroke = 0.5,
- alpha = 0.8,
- position = position_jitterdodge(dodge.width = 0.75, jitter.width = 0.2)
- ) +
- scale_fill_manual(values = sex_colors, name = "Sex") +
- scale_shape_manual(values = shape_values, name = "Original Treatment") +
- facet_wrap(~ facet_id, scales = "free_y", ncol = 3, nrow = 4) +
- labs(x = "Time (months)", y = "Value") +
- theme_classic(base_size = 10) +
- theme(
- strip.background = element_rect(fill = "grey90", color = "black"),
- strip.text = element_text(face = "bold", size = 9),
- axis.text.x = element_text(angle = 45, hjust = 1),
- legend.position = "right"
- )
- print(p)
- dev.off()
- ```
- ```{r Expression_distribution_plot_publication, include=FALSE}
- library(dplyr)
- library(tidyr)
- library(ggplot2)
- # ---------------------------------------------------------------
- # 1. PREPARE DATA (unique mice, log2-transform, compute stats)
- # ---------------------------------------------------------------
- repeats_data <- data %>%
- filter(
- Treatment == "Repeats",
- Expression_Merged > 0
- )
- # Extract Expression_* columns
- expression_cols <- grep("^Expression_", colnames(repeats_data), value = TRUE)
- repeats_data <- repeats_data %>%
- mutate(across(all_of(expression_cols), as.numeric))
- # Pivot Expression_* → one column, then keep UNIQUE mice
- unique_expression <- repeats_data %>%
- pivot_longer(
- cols = all_of(expression_cols),
- names_to = "Timepoint",
- values_to = "Expression"
- ) %>%
- filter(!is.na(Expression), Expression > 0) %>%
- distinct(Ear_Tag, .keep_all = TRUE) %>%
- select(Ear_Tag, Expression)
- # Raw-scale summary stats
- min_exp <- min(unique_expression$Expression)
- max_exp <- max(unique_expression$Expression)
- quart_raw <- quantile(unique_expression$Expression, probs = c(.25, .50, .75))
- mean_expression <- mean(unique_expression$Expression)
- median_expression <- median(unique_expression$Expression)
- # Convert everything to log2 space for plotting
- unique_expression <- unique_expression %>%
- mutate(Expression_log2 = log2(Expression))
- min_log <- log2(min_exp)
- max_log <- log2(max_exp)
- quart_log <- log2(quart_raw)
- mean_log <- log2(mean_expression)
- median_log <- log2(median_expression)
- # Dynamic bin width for histogram
- log_range <- max_log - min_log
- n_bins <- 20
- bin_width <- log_range / n_bins
- # ---------------------------------------------------------------
- # 2. HISTOGRAM PDF OUTPUT
- # ---------------------------------------------------------------
- pdf("Expression_Histogram_UniqueMice_log2.pdf", width = 3, height = 2)
- hist_plot <- ggplot(unique_expression, aes(x = Expression_log2)) +
- geom_rect(aes(xmin = min_log, xmax = quart_log[1], ymin = 0, ymax = Inf),
- fill = "lightblue", alpha = 0.4, inherit.aes = FALSE) +
- geom_rect(aes(xmin = quart_log[1], xmax = quart_log[2], ymin = 0, ymax = Inf),
- fill = "lightgreen", alpha = 0.4, inherit.aes = FALSE) +
- geom_rect(aes(xmin = quart_log[2], xmax = quart_log[3], ymin = 0, ymax = Inf),
- fill = "lightyellow", alpha = 0.4, inherit.aes = FALSE) +
- geom_rect(aes(xmin = quart_log[3], xmax = max_log, ymin = 0, ymax = Inf),
- fill = "lightpink", alpha = 0.4, inherit.aes = FALSE) +
- geom_histogram(binwidth = bin_width,
- color = "black", fill = "steelblue", alpha = 0.75) +
- geom_vline(xintercept = mean_log, color = "red", linetype = "dashed", linewidth = 1) +
- geom_vline(xintercept = median_log, color = "darkgreen", linetype = "dashed", linewidth = 1) +
- annotate("text", x = mean_log, y = 0,
- label = paste0("Mean: ", round(mean_expression,1)),
- hjust = -0.1, vjust = -1.5, color = "red", size = 3) +
- annotate("text", x = median_log, y = 0,
- label = paste0("Median: ", round(median_expression,1)),
- hjust = -0.1, vjust = -3, color = "darkgreen", size = 3) +
- scale_x_continuous(
- breaks = pretty(c(min_log, max_log), n = 5),
- labels = function(x) round(2^x, 1)
- ) +
- theme_classic() +
- labs(
- title = "Expression Histogram (Unique Mice, Repeats Only)",
- x = "Expression (raw units, log2 axis)",
- y = "Count"
- )
- print(hist_plot)
- dev.off()
- # ---------------------------------------------------------------
- # 3. DENSITY PDF OUTPUT
- # ---------------------------------------------------------------
- pdf("Expression_Density_UniqueMice_log2.pdf", width = 3, height = 2)
- density_plot <- ggplot(unique_expression, aes(x = Expression_log2)) +
- geom_rect(aes(xmin = min_log, xmax = quart_log[1], ymin = 0, ymax = Inf),
- fill = "lightblue", alpha = 0.4, inherit.aes = FALSE) +
- geom_rect(aes(xmin = quart_log[1], xmax = quart_log[2], ymin = 0, ymax = Inf),
- fill = "lightgreen", alpha = 0.4, inherit.aes = FALSE) +
- geom_rect(aes(xmin = quart_log[2], xmax = quart_log[3], ymin = 0, ymax = Inf),
- fill = "lightyellow", alpha = 0.4, inherit.aes = FALSE) +
- geom_rect(aes(xmin = quart_log[3], xmax = max_log, ymin = 0, ymax = Inf),
- fill = "lightpink", alpha = 0.4, inherit.aes = FALSE) +
- geom_density(fill = "steelblue", alpha = 0.6) +
- geom_vline(xintercept = mean_log, color = "red", linetype = "dashed", linewidth = 1) +
- geom_vline(xintercept = median_log, color = "darkgreen", linetype = "dashed", linewidth = 1) +
- annotate("text", x = mean_log, y = 0.01,
- label = paste0("Mean: ", round(mean_expression, 1)),
- hjust = -0.1, color = "red", size = 4) +
- annotate("text", x = median_log, y = 0.015,
- label = paste0("Median: ", round(median_expression, 1)),
- hjust = -0.1, color = "darkgreen", size = 4) +
- scale_x_continuous(
- breaks = pretty(c(min_log, max_log), n = 5),
- labels = function(x) round(2^x, 1)
- ) +
- theme_classic() +
- labs(
- title = "Expression Density (Unique Mice, Repeats Only)",
- x = "Expression (raw units, log2 axis)",
- y = "Density"
- )
- print(density_plot)
- dev.off()
- ```
KAR_Acta_Neuro_Comm_v1.13.Rmd, under CC-BY-4.0 · at the source
Overview
- Department of Neuroscience, Vickie and Jack Farber Institute for Neuroscience, Thomas Jefferson University, Philadelphia, PA 19107 USA
- Jefferson Weinberg ALS Center, Vickie and Jack Farber Institute for Neuroscience, Thomas Jefferson University, Philadelphia, PA 19107 USA
- Department of Neurology, Johns Hopkins University School of Medicine, Baltimore, MD 21205 USA
- Brain Science Institute, Johns Hopkins University School of Medicine, Baltimore, MD 21205 USA
Abstract
The abstract is not reproduced here: the paper's license (CC BY-NC-ND) does not allow it. Read it in the paper, at the publisher or on Europe PMC.
Repository
Its files are read in the Code ↔ Paper reader above, with 2 matches between paragraphs and lines of code.
figshare 32825642
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
1 file
- KAR_Acta_Neuro_Comm_v1.1
3.Rmd , R, 1,195 lines, 2 matches
Code availability statement
The paper has a code availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:
- it points to the authors' code: figshare 32825642
Read it in the paper: doi.org/10.1186/s40478-026-02341-8.
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;
- 1 script, each with its path and the digest of its content;
- 2 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
No dataset and no data link were found in the paper.
Data availability statement
The paper has a data availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:
- it says that the data are available on request
Read it in the paper: doi.org/10.1186/s40478-026-02341-8.
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, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 8 authors, 8 keywords, 16 MeSH terms, 5 funders, 94 references.
Cite
This paper
Russell, K. A., Shahrabi, A. A., Akerman, S. C., Byrne, M. D., Rothstein, J. D., Trotti, D., Jensen, B. K., & Haeusler, A. R. (2026). Intrathecal (G&
BibTeX
@article{russell2026intr
author = {Russell, Katelyn A and Shahrabi, Amelia A and Akerman, Suleyman C and Byrne, Matthew D and Rothstein, Jeffrey D and Trotti, Davide and Jensen, Brigid K and Haeusler, Aaron R},
title = {{Intrathecal (G\&
journal = {Acta neuropathologica communications},
year = {2026},
month = jun,
volume = {14},
number = {1},
pages = {167},
publisher = {BMC},
issn = {2051-5960},
doi = {10.1186/
url = {https://
pmid = {42316301},
pmcid = {PMC13476920}
}
RIS
TY - JOUR
AU - Russell, Katelyn A
AU - Shahrabi, Amelia A
AU - Akerman, Suleyman C
AU - Byrne, Matthew D
AU - Rothstein, Jeffrey D
AU - Trotti, Davide
AU - Jensen, Brigid K
AU - Haeusler, Aaron R
TI - Intrathecal (G&
T2 - Acta neuropathologica communications
J2 - Acta Neuropathol Commun
PY - 2026
DA - 2026/
VL - 14
IS - 1
SP - 167
SN - 2051-5960
PB - BMC
DO - 10.1186/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1186/
"type": "article-journal",
"title": "Intrathecal (G&
"container-title": "Acta neuropathologica communications",
"author": [
{
"family": "Russell",
"given": "Katelyn A"
},
{
"family": "Shahrabi",
"given": "Amelia A"
},
{
"family": "Akerman",
"given": "Suleyman C"
},
{
"family": "Byrne",
"given": "Matthew D"
},
{
"family": "Rothstein",
"given": "Jeffrey D"
},
{
"family": "Trotti",
"given": "Davide"
},
{
"family": "Jensen",
"given": "Brigid K"
},
{
"family": "Haeusler",
"given": "Aaron R"
}
],
"container-title-short":
"volume": "14",
"issue": "1",
"page": "167",
"DOI": "10.1186/
"PMID": "42316301",
"PMCID": "PMC13476920",
"ISSN": "2051-5960",
"publisher": "BMC",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
18
]
]
}
}
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.1093/brain/awaf340
- PU.1 restores microglial dysfunction caused by C9ORF72 repeat expansions in neural organoids.Journal: Brain : a journal of neurologyIn common: Alzheimer's / dementia, other condition, cellular / molecular, 9 references
- [2] doi:10.1038/s41593-026-02300-5 [code]
- Integrated single-cell and spatial transcriptomic profiling in ALS uncovers peripheral-to-central immune infiltration and reprogramming.Journal: Nature neuroscienceIn common: reshape2, ggplot2, tidyverse, other condition, cellular / molecular, 5 references
- [3] doi:10.1038/s44318-026-00817-w
- The C9orf72/
SMCR8 complex maintains microglial homeostasis via RAB8A-ESCRT-mediated lysosomal repair. Journal: The EMBO journalIn common: mouse, cellular / molecular, 6 references - [4] doi:10.1038/s41588-026-02570-6 [code]
- Somatic mosaicism in ALS and FTD identifies focal mutations associated with widespread degeneration.Journal: Nature geneticsIn common: reshape2, ggplot2, tidyverse, Alzheimer's / dementia, other condition, cellular / molecular, 4 references
- [5] doi:10.1186/s13024-026-00944-2
- TDP-43: [GU]-ardian of the transcriptome.Journal: Molecular neurodegenerationIn common: other condition, cellular / molecular, 6 references
- [6] doi:10.1016/j.cell.2026.05.047 [code]
- An emergent disease-associated motor neuron state precedes cell death in ALS.Journal: CellIn common: broom, ggplot2, tidyverse, other condition, mouse, cellular / molecular, 3 references
- [7] doi:10.1371/journal.pgen.1011909
- Glial cell toxicity in a Drosophila C9orf72 neurodegeneration model.Journal: PLoS geneticsIn common: Alzheimer's / dementia, other condition, cellular / molecular, 5 references
- [8] doi:10.1038/s41597-026-07461-3
- Multimodal ultra-high-field MRI, clinical, cognitive, and genetic profiles across the ALS-FTD spectrum.Journal: Scientific dataIn common: Alzheimer's / dementia, other condition, 5 references
- [9] doi:10.1016/j.isci.2026.116054 [code]
- Global transcriptional changes across multiple isogenic &
lt;i& gt;C9orf72& lt;/ i& gt; patient iPSC-derived neurons. Journal: iScienceIn common: cellular / molecular, 5 references - [10] doi:10.1093/braincomms/fcag272 [code]
- Strenuous physical activity is associated with a younger age of amyotrophic lateral sclerosis onset in two independent cohorts.Journal: Brain communicationsIn common: broom, ggplot2, tidyverse, other condition, 2 references
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, 1 script, and 2 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:12c27f5d9d16a3eb…
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
[.
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.
