Mapping the GDF15 arm of the integrated stress response in human cells and tissues.
The 23 matches · 1 of them tie a paragraph to a whole file, not to given lines: a weak match, whose lines are not tinted
- [1] § Methods › Tissue groups ↔ ISRGDF15_index/Data Processing Scripts/Tissue_proliferation_index.R, lines 169–231 · score 0.87 · skin lower leg, skeletal muscle, breast mammary, salivary gland, suprapubic, brain
- [2] § Methods › Tissue groups ↔ ISRGDF15_index/Main Figure Scripts/Figure_4D_4E.R, lines 126–180 · score 0.86 · heart atrial appendage, skin lower leg, heart left ventricle, colon, suprapubic, esophageal
- [3] § Methods › The Gene Tissue Expression (GTEx) dataset ↔ ISRGDF15_index/Main Figure Scripts/Helper Scripts/gtex/Attibutes_Phenos_Merged_plus_COD.R, lines 167–236 · score 0.86 · heart disease, aortic dissection, probable mi, acute mi, DTHFUCOD, DTHCOD
- [4] § Methods › The Gene Tissue Expression (GTEx) dataset ↔ ISRGDF15_index/Main Figure Scripts/Helper Scripts/Figure_4D_Base.R, lines 134–179 · score 0.79 · small intestines, kidney cortex, ileum, pancreas, spleen, uterus
- [5] § Methods › Senescence and Proliferation Index Scores ↔ ISRGDF15_index/Data/gtex/Age_comparisons/Tissue_Expression_Processing.R, lines 2–43 · score 0.77 · CDKN1A, CDKN2A, TOP2A, proliferative genes, CCND2, senescence
- [6] § Results › Linking cause of death and tissue-specific ISR activation ↔ ISRGDF15_index/Main Figure Scripts/Figure_4B.R, lines 1–50 · score 0.76 · brain frontal cortex, heart left ventricle, Emergency Room, hospital inpatient, GDF15 expression, death
- [7] § Results › Applying the ISRGDF15 index in human tissues ↔ ISRGDF15_index/Data/gtex/Age_comparisons/Tissue_Expression_Processing.R, lines 2–43 · score 0.76 · CDKN1A, CDKN2A, TOP2A, tissue expressions, CCND2, MKI67
- [8] § Results › Applying the ISRGDF15 index in human tissues ↔ ISRGDF15_index/Data/gtex/Age_comparisons/Age_vs_Chose_Comparison.R, lines 2–74 · score 0.75 · CDKN1A, CDKN2A, TOP2A, tissue expressions, CCND2, MKI67
- [9] § Methods › Senescence and Proliferation Index Scores ↔ ISRGDF15_index/Data/gtex/Age_comparisons/Age_vs_Chose_Comparison.R, lines 2–74 · score 0.70 · CDKN1A, CDKN2A, TOP2A, CCND2, senescence, MKI67
- [10] § Results › Linking cause of death and tissue-specific ISR activation ↔ ISRGDF15_index/Main Figure Scripts/Helper Scripts/Figure_3B_4A_Base.R, lines 814–889 · score 0.70 · brain frontal cortex, heart left ventricle, Emergency Room, hospital inpatient, Spearman, tissue
- [11] § Results › Generating the ISRGDF15 index ↔ ISRGDF15_index/Main Figure Scripts/Figure_1G.R, lines 1–73 · score 0.69 · ascending median score, Kruskal Wallis, contact inhibition, Dunn, DEX, Oligo
- [12] § Methods › Statistics ↔ ISRGDF15_index/Main Figure Scripts/Figure_1G_HedgesG.R, lines 41–114 · score 0.68 · Wilcoxon rank sum, cohen.d, Kruskal, Hedge, BH, Bonferroni
- [13] § Methods › ISR gene list compilation ↔ ISRGDF15_index/Main Figure Scripts/Helper Scripts/Fibroblast_lifespan/GO_vs_AnyGenes_vs_JacksonLabs_ListsofGenes.R, the whole file · a weak match · score 0.66 · GO Consortium, Jackson, IRGM, Igtp, ISR gene, NARS
- [14] § Results › Linking cause of death and tissue-specific ISR activation ↔ ISRGDF15_index/Main Figure Scripts/Figure_4D_4E.R, lines 126–180 · score 0.66 · atrial appendage, left ventricle, transverse, colon, esophageal, skin
- [15] § Methods › ISR gene list compilation ↔ ISRGDF15_index/Data Processing Scripts/Figure_1A_Process_Data.R, lines 1–34 · score 0.63 · GO Consortium, IRGM, Igtp, Jackson, ISR gene, NARS
- [16] § Methods › Statistics ↔ ISRGDF15_index/Main Figure Scripts/Helper Scripts/Figure_4E_Base.R, lines 135–220 · score 0.62 · Wilcoxon rank sum, cohen.d, Prism, Hedge
- [17] § Results › Generating the ISRGDF15 index ↔ ISRGDF15_index/Main Figure Scripts/Figure_3D.R, lines 242–305 · score 0.60 · mitoNUITs, contact inhibition, mutations, oligomycin, DEX, SURF1
- [18] § Results › Generating the ISRGDF15 index ↔ ISRGDF15_index/Data Processing Scripts/Figure_1G_Process_Data.R, lines 42–88 · score 0.60 · mitoNUITs, contact inhibition, mutations, oligomycin, DEX, SURF1
- [19] § Results › Generating the ISRGDF15 index ↔ ISRGDF15_index/Main Figure Scripts/Figure_3D.R, lines 242–305 · score 0.55 · mitoNUITs, contact inhibition, DG, mutations, oligomycin, DEX
- [20] § Results › Experimental validation of the ISRGDF15 index ↔ ISRGDF15_index/Main Figure Scripts/Helper Scripts/Figure_2F_Base.R, lines 425–476 · score 0.55 · dimerizable PERK, arsenite, thapsigargin, untreated, parental, UT
- [21] § Results › Experimental validation of the ISRGDF15 index ↔ ISRGDF15_index/Main Figure Scripts/Figure_2F.R, lines 54–116 · score 0.53 · dimerizable PERK, arsenite, thapsigargin, untreated, parental, UT
- [22] § Results › Linking cause of death and tissue-specific ISR activation ↔ ISRGDF15_index/Main Figure Scripts/Helper Scripts/Figure_4D_Base.R, lines 1–48 · score 0.52 · median proliferation score, Proliferative tissues, deathplace, split, ISR
- [23] § Results › Linking cause of death and tissue-specific ISR activation ↔ ISRGDF15_index/Main Figure Scripts/Figure_4B.R, lines 139–234 · score 0.51 · emergency room, hospital inpatient, HI, death, tissue, score
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 · 519 lines · 22 KB · no license · 2 matches
- # ============================================================================
- # Figures 4D & 4E: Journal-Compliant Dot Plots with Individual Donor Points
- # Journal requirement: show individual data points behind tissue-level summaries
- # ============================================================================
- # Generates FOUR plots (two tissue sets × two analytes):
- # [ISR] Figure_4D_4E_ISR_all_tissues.png
- # [ISR sig] Figure_4D_4E_ISR_significant_tissues.png
- # [Proliferation] Figure_4D_4E_Proliferation_all_tissues.png
- # [Prolif sig] Figure_4D_4E_Proliferation_significant_tissues.png
- #
- # ISR (Factor1) scores come from All_Tissue_data_DTHPLCE.csv (per-donor).
- # Proliferation scores (sum of MKI67 + RRM2 + TOP2A TPM per donor) are
- # computed on first run from the GTEx TPM file, then cached to:
- # Data/gtex/Processed/proliferation_per_donor.csv
- #
- # X-axis: tissues, ordered by descending mean score (each plot uses its own metric)
- # Dots: individual donors, translucent and jittered
- # Line: crossbar at tissue mean, opaque
- # ============================================================================
- library(here)
- library(tidyverse)
- library(ggplot2)
- library(purrr)
- # ============================================================================
- # SOURCE FIGURE 4D SCRIPT TO GET data_sig (significant tissues)
- # ============================================================================
- message("\n=== Sourcing Figure 4D script to get data_sig ===")
- source(here("Main Figure Scripts", "Helper Scripts", "Figure_4D_Base.R"), local = TRUE)
- # Re-define output directory AFTER sourcing (source script clears environment)
- out_dir <- here("Results", "Figures", "Figure_4D_4E")
- if (!dir.exists(out_dir)) dir.create(out_dir, recursive = TRUE)
- # data_sig: tissue-level summary with Tissue, Avg_Factor1, proliferation_score,
- # Significant, deathplace_comparison, Proliferative_Group
- # Standardise tissue names to lowercase
- data_sig <- data_sig %>% mutate(Tissue = tolower(Tissue))
- sig_tissues <- unique(data_sig$Tissue)
- message("Significant tissues in data_sig: ", length(sig_tissues))
- # ============================================================================
- # LOAD PER-DONOR ISR (FACTOR1) SCORES
- # ============================================================================
- # Build the per-donor / per-tissue long-format dataframe by reading the
- # per-tissue Plot_Data_<tissue>.csv files written by
- # Figure_3B_4A_Tissue_Scatter.R. Helper applies NO DTHPLCE filtering; this
- # script's main donor_isr below uses every donor (no DTHPLCE restriction),
- # while the supplemental Figure 4E DTHPLCE breakdown filters internally.
- message("\n=== Loading per-donor ISR scores ===")
- source(here("Main Figure Scripts", "Helper Scripts",
- "Load_All_Tissue_DTHPLCE.R"))
- all_tissue_data <- load_all_tissue_dthplce()
- donor_isr <- all_tissue_data %>%
- filter(fa_vs_gdf15 == "Factor1") %>%
- select(SAMPID, Tissue, value) %>%
- rename(score = value) %>%
- mutate(Tissue = tolower(Tissue))
- message("Per-donor ISR rows loaded: ", nrow(donor_isr))
- message("Unique tissues in ISR data: ", n_distinct(donor_isr$Tissue))
- # ============================================================================
- # LOAD OR COMPUTE PER-DONOR PROLIFERATION SCORES
- # Cached after first run to avoid re-reading the 2.5 GB GTEx TPM file.
- # ============================================================================
- per_donor_prolif_file <- here("Data", "gtex", "Processed", "proliferation_per_donor.csv")
- if (file.exists(per_donor_prolif_file)) {
- message("\n=== Loading cached per-donor proliferation scores ===")
- donor_prolif <- read.csv(per_donor_prolif_file)
- message("Rows loaded: ", nrow(donor_prolif))
- # Info: raw sums of 0 will become -Inf after log2 at plot time.
- n_zero <- sum(donor_prolif$avg_prolif == 0, na.rm = TRUE)
- if (n_zero > 0) {
- message(" Note: ", n_zero, " samples have raw sum = 0 (all 3 genes = 0 TPM)")
- }
- } else {
- message("\n=== Computing per-donor proliferation scores from GTEx TPM ===")
- message(" (This only runs once; results are cached for future use)")
- gtex_tpm_file <- here("Data", "gtex", "GTEx_Analysis_2017-06-05_v8_RNASeQCv1.1.9_gene_tpm.gct.gz")
- annotations_file <- here("Data", "gtex", "Insert_GTEx_SampleAttributes_and_SubjectPhenotypes_Here",
- "GTEx_Analysis_2017-06-05_v8_Annotations_GTEx_Analysis_2017-06-05_v8_Annotations_SampleAttributesDS.tsv")
- if (!file.exists(gtex_tpm_file)) {
- stop(paste0(
- "\n============================================================\n",
- "ERROR: GTEx TPM file not found.\n",
- "Expected: ", gtex_tpm_file, "\n",
- "Per-donor proliferation scores cannot be computed without it.\n",
- "============================================================\n"
- ))
- }
- if (!file.exists(annotations_file)) {
- stop(paste0(
- "\n============================================================\n",
- "ERROR: GTEx sample annotations file not found.\n",
- "Expected: ", annotations_file, "\n",
- "============================================================\n"
- ))
- }
- message(" Reading GTEx TPM file (may take several minutes)...")
- gtex <- read.delim(gtex_tpm_file, skip = 2)
- exprs <- gtex %>%
- dplyr::select(-Name) %>%
- rename(Gene = Description)
- message(" Filtering to proliferation genes: MKI67, RRM2, TOP2A ...")
- exprs_prolif_genes <- exprs %>%
- as.data.frame() %>%
- filter(Gene %in% c("MKI67", "RRM2", "TOP2A"))
- if (nrow(exprs_prolif_genes) < 3) {
- stop("ERROR: Fewer than 3 proliferation genes found in GTEx TPM file.")
- }
- # Transpose: samples as rows, genes as columns
- exprs_prolif_t <- exprs_prolif_genes %>%
- column_to_rownames("Gene") %>%
- t() %>%
- as.data.frame() %>%
- rownames_to_column("X")
- # Sum raw TPM of 3 genes per sample (NO log2 — raw sums cached; log2 at plot time)
- exprs_prolif_summed <- exprs_prolif_t %>%
- pivot_longer(cols = c("MKI67", "RRM2", "TOP2A"), names_to = "Gene", values_to = "TPM") %>%
- group_by(X) %>%
- summarise(sum_TPM = sum(TPM, na.rm = TRUE), .groups = "drop") %>%
- mutate(avg_prolif = sum_TPM)
- # Load sample annotations
- message(" Reading sample annotations...")
- ann <- read_tsv(annotations_file, show_col_types = FALSE) %>%
- filter(SMAFRZE == "RNASEQ") %>%
- mutate(SUBJID = substring(SAMPID, 1, 10)) %>%
- mutate(SUBJID = case_when(
- substr(SUBJID, nchar(SUBJID), nchar(SUBJID)) == "-" ~ substr(SUBJID, 1, nchar(SUBJID) - 1),
- TRUE ~ SUBJID
- ))
- # Normalise SAMPID format to match TPM column names
- ann <- ann %>%
- mutate(X = gsub("\\-", ".", SAMPID)) %>%
- select(X, SMTSD, SUBJID, SMRIN)
- # Join and apply RIN filter (matching Tissue_proliferation_index.R)
- donor_prolif_long <- exprs_prolif_summed %>%
- inner_join(ann, by = "X") %>%
- filter(SMRIN >= 5.5) %>%
- select(SAMPID = X, SUBJID, Tissue_raw = SMTSD, avg_prolif) %>%
- distinct()
- # Standardise tissue names (same transformations as Tissue_proliferation_index.R)
- donor_prolif_long <- donor_prolif_long %>%
- mutate(Tissue = gsub(" - ", "_", Tissue_raw)) %>%
- mutate(Tissue = gsub(" ", "_", Tissue)) %>%
- mutate(Tissue = gsub("-", "_", Tissue)) %>%
- mutate(Tissue = gsub("\\(", "", Tissue)) %>%
- mutate(Tissue = gsub("\\)", "", Tissue)) %>%
- mutate(Tissue = tolower(Tissue)) %>%
- mutate(Tissue = case_when(
- Tissue == "brain_frontal_cortex_ba9" ~ "brain_frontal_cortex",
- Tissue == "skin_sun_exposed_lower_leg" ~ "skin_lower_leg",
- Tissue == "skin_not_sun_exposed_suprapubic" ~ "skin_suprapubic",
- Tissue == "colon_sigmoid" ~ "colon_sigmoid",
- Tissue == "colon_transverse" ~ "colon_transverse",
- Tissue == "esophagus_gastroesophageal_junction" ~ "esophagus_gej",
- Tissue == "heart_left_ventricle" ~ "heart_left_ventricle",
- Tissue == "heart_atrial_appendage" ~ "heart_atrial_appendage",
- TRUE ~ Tissue
- ))
- # Cache per-donor proliferation scores (RAW sums, not log2).
- # log2 is applied at plot time.
- donor_prolif <- donor_prolif_long %>%
- select(SAMPID, Tissue, avg_prolif)
- # Cache for future runs
- write.csv(donor_prolif, per_donor_prolif_file, row.names = FALSE)
- message(" Cached per-donor proliferation scores to: ", per_donor_prolif_file)
- message(" Rows cached: ", nrow(donor_prolif))
- }
- # ============================================================================
- # HARMONISE PROLIFERATION TISSUE NAMES TO MATCH data_sig
- # The cached proliferation_per_donor.csv uses GTEx annotation names which
- # differ from the ISR analysis names for several tissues.
- # ============================================================================
- donor_prolif <- donor_prolif %>%
- mutate(Tissue = tolower(Tissue)) %>%
- mutate(Tissue = case_when(
- Tissue == "brain_nucleus_accumbens_basal_ganglia" ~ "brain_nucelus_accumbens_basal_ganglia",
- Tissue == "brain_spinal_cord_cervical_c_1" ~ "brain_spinal_cord_cervical_c1",
- Tissue == "breast_mammary_tissue" ~ "breast_mammary",
- Tissue == "esophagus_gej" ~ "esophagus_gastroesophageal_junction",
- Tissue == "esophagus_gastroesophageal_junction" ~ "esophagus_gastroesophageal_junction",
- Tissue == "minor_salivary_gland" ~ "salivary_gland",
- Tissue == "muscle_skeletal" ~ "skeletal_muscle",
- TRUE ~ Tissue
- ))
- # Verify matching
- prolif_tissues_available <- unique(donor_prolif$Tissue)
- missing_from_prolif <- setdiff(sig_tissues, prolif_tissues_available)
- if (length(missing_from_prolif) > 0) {
- message("WARNING: ", length(missing_from_prolif), " significant tissues still missing from proliferation data:")
- message(paste(" -", missing_from_prolif, collapse = "\n"))
- } else {
- message("All ", length(sig_tissues), " significant tissues found in proliferation data.")
- }
- # ============================================================================
- # BUILD TISSUE-LEVEL SUMMARY TABLES (mean per tissue)
- # For ordering and crossbar reference
- # ============================================================================
- tissue_means_isr <- donor_isr %>%
- group_by(Tissue) %>%
- summarise(mean_score = mean(score, na.rm = TRUE), .groups = "drop")
- # Tissue mean for proliferation: avg_prolif contains RAW sums.
- # Average raw sums across donors, then apply log2.
- tissue_means_prolif <- donor_prolif %>%
- group_by(Tissue) %>%
- summarise(mean_score = log2(mean(avg_prolif, na.rm = TRUE)), .groups = "drop")
- # Per-donor display scores: apply log2 to raw sums for plotting.
- # Filter out zero-sum samples (log2(0) = -Inf) to avoid axis issues.
- donor_prolif_plot <- donor_prolif %>%
- filter(avg_prolif > 0) %>%
- mutate(score = log2(avg_prolif))
- # ============================================================================
- # PLOTTING HELPER
- # ============================================================================
- make_dot_plot <- function(donor_data, # data.frame: SAMPID, Tissue, score
- tissue_means, # data.frame: Tissue, mean_score
- title,
- ylab_text,
- dot_color,
- mean_color,
- tissues_to_include, # character vector of tissue names (lowercase)
- order_by = "desc",
- show_mean = TRUE) {
- # Restrict to requested tissues
- donor_sub <- donor_data %>% filter(Tissue %in% tissues_to_include)
- means_sub <- tissue_means %>% filter(Tissue %in% tissues_to_include)
- if (nrow(donor_sub) == 0 || nrow(means_sub) == 0) {
- warning("No data found for the requested tissues in: ", title)
- return(NULL)
- }
- # Compute y-axis limits from data with 10% padding
- y_range <- range(donor_sub$score, na.rm = TRUE)
- y_pad <- diff(y_range) * 0.1
- y_lim <- c(y_range[1] - y_pad, y_range[2] + y_pad)
- # Order tissues by descending mean score
- tissue_order <- means_sub %>%
- arrange(desc(mean_score)) %>%
- pull(Tissue)
- donor_sub <- donor_sub %>%
- mutate(Tissue = factor(Tissue, levels = tissue_order))
- means_sub <- means_sub %>%
- mutate(Tissue = factor(Tissue, levels = tissue_order))
- p <- ggplot() +
- # Individual donor dots — translucent, jittered
- geom_jitter(
- data = donor_sub,
- aes(x = Tissue, y = score),
- color = dot_color, alpha = 0.25, size = 1.8,
- width = 0.22, height = 0
- )
- # Optionally add tissue mean crossbar
- if (show_mean) {
- p <- p +
- geom_crossbar(
- data = means_sub,
- aes(x = Tissue, y = mean_score, ymin = mean_score, ymax = mean_score),
- color = mean_color, width = 0.55, linewidth = 0.7
- )
- }
- p <- p +
- scale_y_continuous(limits = y_lim, expand = c(0, 0)) +
- scale_x_discrete(expand = expansion(add = 0.6)) +
- labs(title = title, x = "Tissue", y = ylab_text) +
- theme_minimal(base_size = 14) +
- theme(
- plot.title = element_text(face = "bold"),
- axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1, colour = "black"),
- axis.text.y = element_text(colour = "black"),
- axis.title = element_text(colour = "black"),
- panel.grid.major.x = element_blank(),
- panel.grid.minor = element_blank(),
- panel.grid.major.y = element_line(colour = "grey92"),
- plot.margin = margin(t = 10, r = 20, b = 5.5, l = 15)
- )
- return(p)
- }
- # ============================================================================
- # FIGURE 4E + SUPPLEMENTAL FIGURE 8
- # ============================================================================
- # Both plots are computed on `data_sig` (significant tissues only — built by
- # Figure_4D_Base.R after the median-proliferation split). Each is a
- # two-group dot plot of Avg_Factor1 (per-tissue ISR^GDF15 score):
- #
- # Figure 4E — split by deathplace_comparison
- # (which side of the H/E comparison the tissue fell on)
- # Supplemental Fig 8 — split by Proliferative_Group
- # (above vs below median proliferation_score)
- #
- # Two CSVs (Prism wide format, no tissue labels) and two PNGs are written
- # to Results/Figures/Figure_4D_4E/. Figure_4E.png is also copied to the
- # shared Results/Figures/ folder; Supplemental_Fig8.png is not.
- # ============================================================================
- message("\n=== Generating Figure 4E + Supplemental Figure 8 ===")
- # --- Helper: build a Prism-style wide CSV (one column per group, no labels) ---
- prism_wide <- function(df, group_col, value_col, group_levels, col_names) {
- out <- lapply(group_levels, function(g) df[[value_col]][df[[group_col]] == g])
- n <- max(lengths(out))
- out <- lapply(out, function(x) c(x, rep(NA_real_, n - length(x))))
- result <- as.data.frame(out, stringsAsFactors = FALSE)
- colnames(result) <- col_names
- result
- }
- # --- Helper: two-group dot plot in the reference-image style ---
- two_group_dot_plot <- function(df, group_col, value_col,
- group_levels, group_labels, group_colors,
- title_text, y_lab) {
- df_local <- df %>%
- filter(.data[[group_col]] %in% group_levels) %>%
- mutate(.grp = factor(.data[[group_col]],
- levels = group_levels,
- labels = group_labels))
- # Wilcoxon p + Hedges g
- # Sign convention: cohen.d returns positive when level-1's mean exceeds
- # level-2's. We display |g| on the plot (direction is visually obvious),
- # and print the full-precision signed value to the console so the
- # caller can sanity-check the magnitude.
- vals <- split(df_local[[value_col]], df_local[[group_col]])
- v1 <- vals[[group_levels[1]]]
- v2 <- vals[[group_levels[2]]]
- wilcox_p <- tryCatch(
- wilcox.test(v1, v2)$p.value,
- error = function(e) NA_real_
- )
- hedges <- tryCatch(
- effsize::cohen.d(df_local[[value_col]],
- factor(df_local[[group_col]], levels = group_levels),
- hedges.correction = TRUE)$estimate,
- error = function(e) NA_real_
- )
- hedges_g <- unname(hedges)
- # ---- Console diagnostics: full-precision summary so 1.00 displayed on
- # ---- the plot can be checked against the underlying value.
- message(" -- ", group_col, " --")
- message(" n(", group_levels[1], ") = ", length(v1),
- ", mean = ", signif(mean(v1, na.rm = TRUE), 5),
- ", median = ", signif(median(v1, na.rm = TRUE), 5))
- message(" n(", group_levels[2], ") = ", length(v2),
- ", mean = ", signif(mean(v2, na.rm = TRUE), 5),
- ", median = ", signif(median(v2, na.rm = TRUE), 5))
- message(" Wilcoxon p (raw) = ", signif(wilcox_p, 6))
- message(" Hedges g (signed, level1 - level2) = ",
- signif(hedges_g, 6))
- message(" |Hedges g| (plot label) = ", signif(abs(hedges_g), 6))
- p_label <- ifelse(is.na(wilcox_p), "ns",
- ifelse(wilcox_p < 0.0001, "****",
- ifelse(wilcox_p < 0.001, "***",
- ifelse(wilcox_p < 0.01, "**",
- ifelse(wilcox_p < 0.05, "*", "ns")))))
- # Display with 3 decimals so a true 0.987 / 1.013 isn't masked as "1.00".
- g_label <- if (!is.na(hedges_g)) {
- paste0("g = ", format(round(abs(hedges_g), 3), nsmall = 3))
- } else "g = NA"
- y_max <- max(df_local[[value_col]], na.rm = TRUE)
- y_min <- min(df_local[[value_col]], na.rm = TRUE)
- y_pad <- (y_max - y_min) * 0.18
- ggplot(df_local, aes(x = .grp, y = .data[[value_col]], color = .grp)) +
- geom_jitter(width = 0.15, height = 0, size = 4, alpha = 0.85) +
- stat_summary(fun = median, geom = "crossbar",
- width = 0.55, linewidth = 0.6, fatten = 1.5) +
- # Significance bracket + stars + g annotation, stacked above data
- annotate("segment",
- x = 1, xend = 2,
- y = y_max + y_pad * 0.7, yend = y_max + y_pad * 0.7,
- color = "black", linewidth = 0.5) +
- annotate("text",
- x = 1.5, y = y_max + y_pad * 1.1,
- label = p_label,
- size = 8, fontface = "bold") +
- annotate("text",
- x = 1.5, y = y_max + y_pad * 0.4,
- label = g_label,
- size = 5) +
- scale_color_manual(values = setNames(group_colors, group_labels),
- guide = "none") +
- scale_y_continuous(expand = expansion(mult = c(0.05, 0.18))) +
- labs(title = title_text, x = NULL, y = y_lab) +
- theme_classic(base_size = 14) +
- theme(
- plot.title = element_text(face = "bold", hjust = 0.5,
- margin = margin(b = 10)),
- axis.text = element_text(color = "black"),
- axis.title = element_text(color = "black")
- )
- }
- # ---------------------------------------------------------------------------
- # Figure 4E: proliferation_score split by deathplace_comparison
- # (Matches the Prism reference image with g = 1.17.)
- # ---------------------------------------------------------------------------
- fig4e_levels <- c("ER>HI", "HI>ER")
- fig4e_labels <- c("ER > HI", "HI > ER")
- fig4e_colors <- c("#A04C7A", "#E89B3C") # magenta-pink, orange
- # CSV (Prism wide)
- fig4e_csv <- prism_wide(
- df = data_sig %>% filter(deathplace_comparison %in% fig4e_levels),
- group_col = "deathplace_comparison",
- value_col = "proliferation_score",
- group_levels = fig4e_levels,
- col_names = c("ER_greater_than_HI", "HI_greater_than_ER")
- )
- fig4e_csv_path <- file.path(out_dir, "4E_for_prism.csv")
- write.csv(fig4e_csv, fig4e_csv_path, row.names = FALSE, na = "")
- message(" Saved: ", fig4e_csv_path)
- # Plot
- fig4e_plot <- two_group_dot_plot(
- df = data_sig,
- group_col = "deathplace_comparison",
- value_col = "proliferation_score",
- group_levels = fig4e_levels,
- group_labels = fig4e_labels,
- group_colors = fig4e_colors,
- title_text = "Proliferation scores by place of death",
- y_lab = "Proliferation score (log2)"
- )
- fig4e_png <- file.path(shared_out_dir, "Figure_4E.png")
- ggsave(fig4e_png, plot = fig4e_plot, width = 5, height = 6, dpi = 300)
- message(" Saved: ", fig4e_png)
- # ---------------------------------------------------------------------------
- # Supplemental Figure 8: Avg_Factor1 split by Proliferative_Group
- # ---------------------------------------------------------------------------
- suppfig8_levels <- c("Proliferative", "Non-Proliferative")
- suppfig8_labels <- c("Proliferative", "Non-\nproliferative")
- suppfig8_colors <- c("#A878B7", "#4D7BB7") # purple, blue
- suppfig8_csv <- prism_wide(
- df = data_sig %>% filter(Proliferative_Group %in% suppfig8_levels),
- group_col = "Proliferative_Group",
- value_col = "Avg_Factor1",
- group_levels = suppfig8_levels,
- col_names = c("Proliferative", "Non_proliferative")
- )
- suppfig8_csv_path <- file.path(out_dir, "Supplemental_Fig8.csv")
- write.csv(suppfig8_csv, suppfig8_csv_path, row.names = FALSE, na = "")
- message(" Saved: ", suppfig8_csv_path)
- suppfig8_plot <- two_group_dot_plot(
- df = data_sig,
- group_col = "Proliferative_Group",
- value_col = "Avg_Factor1",
- group_levels = suppfig8_levels,
- group_labels = suppfig8_labels,
- group_colors = suppfig8_colors,
- title_text = expression(bold("ISR"^"GDF15" ~
- "scores based on proliferation score")),
- y_lab = expression("ISR"^"GDF15" ~ "Score")
- )
- suppfig8_png <- file.path(out_dir, "Supplemental_Fig8.png")
- ggsave(suppfig8_png, plot = suppfig8_plot, width = 5, height = 6, dpi = 300)
- message(" Saved: ", suppfig8_png)
- # (Supplemental_Fig8.png is intentionally NOT copied to Results/Figures/.)
- # ============================================================================
- # SUMMARY
- # ============================================================================
- message(paste0("\n", strrep("=", 65)))
- message("FIGURES 4D & 4E — JOURNAL-COMPLIANT DOT PLOTS COMPLETE")
- message(strrep("=", 65))
- message("\nOutput folder: ", out_dir)
- message(" ", per_donor_prolif_file)
- message("\nFigure 4E + Supplemental Figure 8 outputs:")
- message(" ", fig4e_csv_path)
- message(" ", fig4e_png)
- message(" ", suppfig8_csv_path)
- message(" ", suppfig8_png)
- message(strrep("=", 65))
Figure_4D_4E.R at commit 0cb4c55, no license · at the source
Overview
- Department of Psychiatry, Division of Behavioral Medicine, Columbia University Irving Medical Center,New York, NY USA
- Robert N Butler Columbia Aging Center, Mailman School of Public Health,New York, NY USA
- Biomolecular Science and Engineering Program, University of California Santa Barbara,Santa Barbara, CA USA
- Department of Environmental Health Sciences, Mailman School of Public Health,New York, NY USA
- Department of Neurology, H. Houston Merritt Center for Neurological and Mitochondrial Disorders, Columbia University Irving Medical Center,New York, NY USA
- New York State Psychiatric Institute,New York, NY 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.
Repositories
Its files are read in the Code ↔ Paper reader above, with 23 matches between paragraphs and lines of code.
mitopsychobio/2025_ISR_GDF15_JS_v2
0cb4c5556dca7ae365f8608dcec76d7fa9df50e7, 6 May 2026Availability: 1 check, the latest on 28 September 2026: the link answers
- 28 September 2026: the link answers
35 files
- ISRGDF15_index/
00_Master_Script.R , R, 232 lines - ISRGDF15_index/
Data Processing Scripts/ , R, 136 lines, 1 matchFigure_1A_Process_Data.R - ISRGDF15_index/
Data Processing Scripts/ , R, 289 lines, 1 matchFigure_1G_Process_Data.R - ISRGDF15_index/
Data Processing Scripts/ , R, 231 lines, 1 matchTissue_proliferation_ind ex.R - ISRGDF15_index/
Data/ , R, 390 lines, 2 matchesgtex/ Age_comparisons/ Age_vs_Chose_Comparison. R - ISRGDF15_index/
Data/ , R, 154 lines, 2 matchesgtex/ Age_comparisons/ Tissue_Expression_Proces sing.R - ISRGDF15_index/
Main Figure Scripts/ , R, 147 linesFigure_1A.R - ISRGDF15_index/
Main Figure Scripts/ , R, 125 linesFigure_1D.R - ISRGDF15_index/
Main Figure Scripts/ , R, 556 linesFigure_1E_1F.R - ISRGDF15_index/
Main Figure Scripts/ , R, 263 lines, 1 matchFigure_1G.R - ISRGDF15_index/
Main Figure Scripts/ , R, 114 lines, 1 matchFigure_1G_HedgesG.R - ISRGDF15_index/
Main Figure Scripts/ , R, 503 linesFigure_2C.R - ISRGDF15_index/
Main Figure Scripts/ , R, 170 linesFigure_2E.R - ISRGDF15_index/
Main Figure Scripts/ , R, 260 lines, 1 matchFigure_2F.R - ISRGDF15_index/
Main Figure Scripts/ , R, 136 linesFigure_2G.R - ISRGDF15_index/
Main Figure Scripts/ , R, 864 linesFigure_3B_4A_Tissue_Scat ter.R - ISRGDF15_index/
Main Figure Scripts/ , R, 180 linesFigure_3B_Summary.R - ISRGDF15_index/
Main Figure Scripts/ , R, 288 linesFigure_3C.R - ISRGDF15_index/
Main Figure Scripts/ , R, 503 lines, 2 matchesFigure_3D.R - ISRGDF15_index/
Main Figure Scripts/ , R, 334 lines, 2 matchesFigure_4B.R - ISRGDF15_index/
Main Figure Scripts/ , R, 402 linesFigure_4C.R - ISRGDF15_index/
Main Figure Scripts/ , R, 519 lines, 2 matchesFigure_4D_4E.R - ISRGDF15_index/
Main Figure Scripts/ , R, 79 lines, 1 matchHelper Scripts/ Fibroblast_lifespan/ GO_vs_AnyGenes_vs_Jackso nLabs_ListsofGenes.R - ISRGDF15_index/
Main Figure Scripts/ , R, 314 linesHelper Scripts/ Fibroblast_lifespan/ Intro1_FB_Lifespan_exprs _manifest_ISR_list.R - ISRGDF15_index/
Main Figure Scripts/ , R, 753 linesHelper Scripts/ Figure_2E_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 522 lines, 1 matchHelper Scripts/ Figure_2F_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 519 linesHelper Scripts/ Figure_2G_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 889 lines, 1 matchHelper Scripts/ Figure_3B_4A_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 861 linesHelper Scripts/ Figure_3C_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 300 linesHelper Scripts/ Figure_3D_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 370 lines, 2 matchesHelper Scripts/ Figure_4D_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 287 lines, 1 matchHelper Scripts/ Figure_4E_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 99 linesHelper Scripts/ Load_All_Tissue_DTHPLCE. R - ISRGDF15_index/
Main Figure Scripts/ , R, 237 lines, 1 matchHelper Scripts/ gtex/ Attibutes_Phenos_Merged_ plus_COD.R - README.md, Text, 168 lines
Zenodo 20057240
Availability: 1 check, the latest on 28 September 2026: the link answers (HTTP 200)
- 28 September 2026: the link answers (HTTP 200)
35 files
- ISRGDF15_index/
00_Master_Script.R , R, 232 lines - ISRGDF15_index/
Data Processing Scripts/ , R, 136 linesFigure_1A_Process_Data.R - ISRGDF15_index/
Data Processing Scripts/ , R, 289 linesFigure_1G_Process_Data.R - ISRGDF15_index/
Data Processing Scripts/ , R, 231 linesTissue_proliferation_ind ex.R - ISRGDF15_index/
Data/ , R, 390 linesgtex/ Age_comparisons/ Age_vs_Chose_Comparison. R - ISRGDF15_index/
Data/ , R, 154 linesgtex/ Age_comparisons/ Tissue_Expression_Proces sing.R - ISRGDF15_index/
Main Figure Scripts/ , R, 147 linesFigure_1A.R - ISRGDF15_index/
Main Figure Scripts/ , R, 125 linesFigure_1D.R - ISRGDF15_index/
Main Figure Scripts/ , R, 556 linesFigure_1E_1F.R - ISRGDF15_index/
Main Figure Scripts/ , R, 263 linesFigure_1G.R - ISRGDF15_index/
Main Figure Scripts/ , R, 114 linesFigure_1G_HedgesG.R - ISRGDF15_index/
Main Figure Scripts/ , R, 503 linesFigure_2C.R - ISRGDF15_index/
Main Figure Scripts/ , R, 170 linesFigure_2E.R - ISRGDF15_index/
Main Figure Scripts/ , R, 260 linesFigure_2F.R - ISRGDF15_index/
Main Figure Scripts/ , R, 136 linesFigure_2G.R - ISRGDF15_index/
Main Figure Scripts/ , R, 864 linesFigure_3B_4A_Tissue_Scat ter.R - ISRGDF15_index/
Main Figure Scripts/ , R, 180 linesFigure_3B_Summary.R - ISRGDF15_index/
Main Figure Scripts/ , R, 288 linesFigure_3C.R - ISRGDF15_index/
Main Figure Scripts/ , R, 503 linesFigure_3D.R - ISRGDF15_index/
Main Figure Scripts/ , R, 334 linesFigure_4B.R - ISRGDF15_index/
Main Figure Scripts/ , R, 402 linesFigure_4C.R - ISRGDF15_index/
Main Figure Scripts/ , R, 519 linesFigure_4D_4E.R - ISRGDF15_index/
Main Figure Scripts/ , R, 79 linesHelper Scripts/ Fibroblast_lifespan/ GO_vs_AnyGenes_vs_Jackso nLabs_ListsofGenes.R - ISRGDF15_index/
Main Figure Scripts/ , R, 314 linesHelper Scripts/ Fibroblast_lifespan/ Intro1_FB_Lifespan_exprs _manifest_ISR_list.R - ISRGDF15_index/
Main Figure Scripts/ , R, 753 linesHelper Scripts/ Figure_2E_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 522 linesHelper Scripts/ Figure_2F_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 519 linesHelper Scripts/ Figure_2G_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 889 linesHelper Scripts/ Figure_3B_4A_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 861 linesHelper Scripts/ Figure_3C_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 300 linesHelper Scripts/ Figure_3D_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 370 linesHelper Scripts/ Figure_4D_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 287 linesHelper Scripts/ Figure_4E_Base.R - ISRGDF15_index/
Main Figure Scripts/ , R, 99 linesHelper Scripts/ Load_All_Tissue_DTHPLCE. R - ISRGDF15_index/
Main Figure Scripts/ , R, 237 linesHelper Scripts/ gtex/ Attibutes_Phenos_Merged_ plus_COD.R - README.md, Text, 168 lines
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: mitopsychobio/
2025_ISR_GDF15_JS_v2 , Zenodo 20057240
Read it in the paper: doi.org/10.1038/s42003-026-10312-x.
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:
- 2 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 68 scripts, each with its path and the digest of its content;
- 23 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.1038/s42003-026-10312-x.
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, 8 authors, 4 keywords, 5 MeSH terms, 4 funders, 28 references.
Cite
This paper
Smith, J. L. M., Tanner, K. T., Devine, J., Monzel, A. S., Batjargal, T., Wilson, M. Z., Cohen, A. A., & Picard, M. (2026). Mapping the GDF15 arm of the integrated stress response in human cells and tissues. Communications biology, 9(1), 1126. https://
BibTeX
@article{smith2026mappin
author = {Smith, Janell L. M. and Tanner, Kamaryn T. and Devine, Jack and Monzel, Anna S. and Batjargal, Taivan and Wilson, Maxwell Z. and Cohen, Alan A. and Picard, Martin},
title = {{Mapping the GDF15 arm of the integrated stress response in human cells and tissues}},
journal = {Communications biology},
year = {2026},
month = may,
volume = {9},
number = {1},
pages = {1126},
publisher = {Nature Publishing Group},
issn = {2399-3642},
doi = {10.1038/
url = {https://
pmid = {42203840},
pmcid = {PMC13493765}
}
RIS
TY - JOUR
AU - Smith, Janell L. M.
AU - Tanner, Kamaryn T.
AU - Devine, Jack
AU - Monzel, Anna S.
AU - Batjargal, Taivan
AU - Wilson, Maxwell Z.
AU - Cohen, Alan A.
AU - Picard, Martin
TI - Mapping the GDF15 arm of the integrated stress response in human cells and tissues
T2 - Communications biology
J2 - Commun Biol
PY - 2026
DA - 2026/
VL - 9
IS - 1
SP - 1126
SN - 2399-3642
PB - Nature Publishing Group
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "Mapping the GDF15 arm of the integrated stress response in human cells and tissues",
"container-title": "Communications biology",
"author": [
{
"family": "Smith",
"given": "Janell L. M."
},
{
"family": "Tanner",
"given": "Kamaryn T."
},
{
"family": "Devine",
"given": "Jack"
},
{
"family": "Monzel",
"given": "Anna S."
},
{
"family": "Batjargal",
"given": "Taivan"
},
{
"family": "Wilson",
"given": "Maxwell Z."
},
{
"family": "Cohen",
"given": "Alan A."
},
{
"family": "Picard",
"given": "Martin"
}
],
"container-title-short":
"volume": "9",
"issue": "1",
"page": "1126",
"DOI": "10.1038/
"PMID": "42203840",
"PMCID": "PMC13493765",
"ISSN": "2399-3642",
"publisher": "Nature Publishing Group",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
5,
27
]
]
}
}
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/bioinformatics/btag592 [code]
- Network-based stratification of allele-specific expression reveals patient subgroups in Huntington's disease.Journal: Bioinformatics (Oxford, England)In common: edgeR, limma, broom, 8 other tools, genetics / omics, 1 reference
- [2] doi:10.1038/s42003-026-10957-8 [code]
- Brain defence by the extracellular matrix protein Cochlin.Journal: Communications biologyIn common: edgeR, limma, broom, 8 other tools, cellular / molecular
- [3] doi:10.1016/j.isci.2026.115657 [code]
- Integration of machine learning to develop a disulfidptosis model for predicting glioma prognosis, immunotherapy response, and drug.Journal: iScienceIn common: edgeR, psych, limma, 8 other tools
- [4] doi:10.1016/j.xcrm.2026.102766 [code]
- A longitudinal single-cell and spatial multiomic atlas of pediatric high-grade glioma.Journal: Cell reports. MedicineIn common: edgeR, limma, circlize, 7 other tools, genetics / omics, cellular / molecular
- [5] doi:10.1016/j.xcrm.2026.102682 [code]
- TET CpG sequence-context-specifi
c DNA demethylation shapes progression of IDH-mutant gliomas. Journal: Cell reports. MedicineIn common: edgeR, limma, broom, 7 other tools, genetics / omics - [6] doi:10.1002/imt2.70163 [code]
- Spatial multi-omics unveils sphingolipid metabolic reprogramming within the retinal pathological niche.Journal: iMetaIn common: edgeR, limma, circlize, 7 other tools, genetics / omics, cellular / molecular
- [7] doi:10.1073/pnas.2609132123 [code]
- A human lysosomal storage disorder toolkit for decoding proteome landscapes in cortical-like and dopaminergic-like induced neurons.Journal: Proceedings of the National Academy of Sciences of the United States of AmericaIn common: limma, broom, circlize, 7 other tools, genetics / omics, cellular / molecular
- [8] doi:10.1016/j.isci.2026.115573 [code]
- Female cortical cellular mosaicism underlies shared MeCP2 and PCB impacted gene pathways.Journal: iScienceIn common: edgeR, limma, broom, 7 other tools, cellular / molecular
- [9] doi:10.1038/s41467-026-74753-y [code]
- A human-specific microRNA controls the timing of excitatory synaptogenesis.Journal: Nature communicationsIn common: edgeR, limma, circlize, 7 other tools, cellular / molecular
- [10] doi:10.1038/s41467-026-77170-3 [code]
- DNA methylation profiling identifies long-range epigenetic silencing of clustered protocadherins as a key determinant of meningioma progression.Journal: Nature communicationsIn common: limma, broom, circlize, 6 other tools, genetics / omics, cellular / molecular
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: 2 repositories of the authors' code, each at its verified commit and with its license, 68 scripts, and 23 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:0c60c50f4c1a0183…
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.
