OSCR

Serum ferritin and delirium risk: an integrative genomic analysis of causal inference and multi-tissue regulatory signals.

Code ↔ Paper

17 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 17 matches
  1. [1] § Methods › SMR/HEIDI across tissues ↔ code/Bonferroni Threshold on SMR results.R, lines 106–191 · score 0.89 · Bonferroni threshold, qtl_name, nsnp_heidi, unique probes, p_smr, omics
  2. [2] § Results › Transcriptomics mediation analysis ↔ code/Bonferroni Threshold on SMR results.R, lines 106–191 · score 0.87 · tissue omics, qtl_name, nsnp_heidi, passing probes, unique probes, p_smr
  3. [3] § Methods › Two-sample MR ↔ code/Ferritin-Delirium Two sample MR.R, lines 193–259 · score 0.69 · inverse variance weighted, MR Egger intercept, Instrument, IVW, SNP
  4. [4] § Methods › Bayesian colocalization and SuSiE-based fine-mapping ↔ code/SuSiE–coloc Delirium x APOE sQTL.R, lines 189–231 · score 0.68 · susie_rss, COLOC.SUSIE, refine, minimal, posterior, QC
  5. [5] § Methods › Bayesian colocalization and SuSiE-based fine-mapping ↔ code/SuSiE-coloc Ferritin x Delirium.R, lines 238–283 · score 0.66 · susie_rss, coloc.susie, posterior overlap, refine, pp, SNP
  6. [6] § Methods › Data sources and eligibility ↔ code/SuSiE–coloc Delirium x APOE sQTL.R, lines 1–51 · score 0.64 · GTEx v10, brain cortex, sQTL, phenotype, Molecular, delirium
  7. [7] § Methods › Two-sample MR ↔ code/Ferritin-Delirium Two sample MR.R, lines 47–105 · score 0.61 · weighted median, MR PRESSO, Steiger, distortion, global, Outlier
  8. [8] § Results › Locus-level variant sharing ↔ code/Delirium x eQTL(Brain Cortex)(CEACAM19 region).R, lines 134–208 · score 0.60 · delirium GWAS, eQTL, pp h4, overlapping SNPs, cortex, CEACAM19
  9. [9] § Methods › Bayesian colocalization and SuSiE-based fine-mapping ↔ code/Delirium x pQTL(APOE region).R, lines 80–129 · score 0.58 · coloc.abf, pp h4, shared causal, APOE, alleles, MAF
  10. [10] § Results › Primary causal inference ↔ code/Ferritin-Delirium Two sample MR.R, lines 110–169 · score 0.57 · outlier corrected, MR PRESSO, ferritin delirium, IVW, variance, causal
  11. [11] § Methods › Bayesian colocalization and SuSiE-based fine-mapping ↔ code/Delirium × GTEx v10 sQTL (Brain Cortex) (APOE region).R, lines 46–112 · score 0.57 · coloc.abf, pp h4, shared causal, APOE, Windows, MAF
  12. [12] § Methods › Two-sample MR ↔ code/Ferritin-Delirium Two sample MR.R, lines 47–105 · score 0.54 · MR Egger intercept, Cochran, pleiotropy, sensitivity, IVW
  13. [13] § Methods › Two-sample MR ↔ code/Ferritin-Delirium Two sample MR.R, lines 1–45 · score 0.53 · sample MR, clumped, r2, EUR, exposure, harmonized
  14. [14] § Results › Locus-level variant sharing ↔ code/Delirium x eQTL (whole blood)(APOE region).R, lines 1–34 · score 0.53 · 44421094–45421094, eQTLGen, chr19, blood, GRCh38, APOE
  15. [15] § Results › Primary causal inference ↔ code/Ferritin-Delirium Two sample MR.R, lines 193–259 · score 0.52 · MR Egger intercept, weighted median, ivw, slope
  16. [16] § Results › Locus-level variant sharing ↔ code/Ferritin x eQTL(whole blood)(SLC11A2 region).R, lines 144–232 · score 0.52 · eQTLGen, pp h4, mass, SLC11A2, blood, coloc
  17. [17] § Methods › Software, versions, and reproducibility ↔ code/SuSiE–coloc Delirium x APOE sQTL.R, lines 189–231 · score 0.50 · COLOC.SUSIE, LD matrices, scores

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 · 336 lines · 13 KB · MIT · 6 matches

  1. library(data.table)
  2. library(TwoSampleMR)
  3. library(MRPRESSO)
  4. exposure_raw <- fread("Ferritin_AF0p005.mr_ready.tsv.gz")
  5. outcome_raw <- fread("Delirium_AF0p005.mr_ready.tsv.gz")
  6. # Map to TwoSampleMR expected names
  7. exp_dat <- copy(exposure_raw)
  8. setnames(exp_dat, c("effect_allele","other_allele","beta","se","eaf","pval","samplesize"),
  9. c("effect_allele.exposure","other_allele.exposure","beta.exposure","se.exposure",
  10. "eaf.exposure","pval.exposure","samplesize.exposure"))
  11. exp_dat[, exposure := "Ferritin"]
  12. # Outcome mapping
  13. out_dat <- copy(outcome_raw)
  14. setnames(out_dat, c("effect_allele","other_allele","beta","se","eaf","pval","samplesize"),
  15. c("effect_allele.outcome","other_allele.outcome","beta.outcome","se.outcome",
  16. "eaf.outcome","pval.outcome","samplesize.outcome"))
  17. out_dat[, outcome := "Delirium"]
  18. # Start at p<5e-8; if <3 SNPs remain, relax to p<5e-6 as pre-specified sensitivity.
  19. exp_gws <- exp_dat[pval.exposure < 5e-8]
  20. if (nrow(exp_gws) < 3) exp_gws <- exp_dat[pval.exposure < 5e-6]
  21. #Here, (OPENGWAS_JWT = "") must include a token from https://api.opengwas.io
  22. Sys.setenv(OPENGWAS_JWT = "")
  23. exp_gws <- clump_data(
  24. exp_gws,
  25. clump_kb = 10000,
  26. clump_r2 = 0.001,
  27. pop = "EUR")
  28. # Harmonisation
  29. exp_fmt <- format_data(
  30. as.data.frame(exp_gws), type = "exposure", snp_col = "SNP",
  31. beta_col = "beta.exposure", se_col = "se.exposure",
  32. eaf_col = "eaf.exposure",
  33. effect_allele_col = "effect_allele.exposure",
  34. other_allele_col = "other_allele.exposure",
  35. pval_col = "pval.exposure",
  36. samplesize_col = "samplesize.exposure",
  37. phenotype_col = "exposure"
  38. )
  39. # Keep only outcome rows at IV SNPs, then format
  40. outcome_iv <- out_dat[SNP %in% exp_gws$SNP]
  41. out_fmt <- format_data(
  42. as.data.frame(outcome_iv), type = "outcome", snp_col = "SNP",
  43. beta_col = "beta.outcome", se_col = "se.outcome",
  44. eaf_col = "eaf.outcome",
  45. effect_allele_col = "effect_allele.outcome",
  46. other_allele_col = "other_allele.outcome",
  47. pval_col = "pval.outcome",
  48. samplesize_col = "samplesize.outcome",
  49. phenotype_col = "outcome"
  50. )
  51. exp_fmt$exposure <- "Ferritin"
  52. out_fmt$outcome <- "Delirium"
  53. dat_h <- harmonise_data(exp_fmt, out_fmt, action = 2)
  54. # F-stat per SNP ~ (beta.exposure^2 / se.exposure^2); mean F as a quick check
  55. dat_h$F_exposure <- (dat_h$beta.exposure^2) / (dat_h$se.exposure^2)
  56. mean_F <- mean(dat_h$F_exposure, na.rm=TRUE); mean_F
  57. # PRIMARY MR + SENSITIVITIES
  58. mr_main <- mr(dat_h, method_list = c("mr_ivw", "mr_ivw_mre",
  59. "mr_egger_regression", "mr_weighted_median"))
  60. het <- mr_heterogeneity(dat_h) # Cochran's Q
  61. pleio <- mr_pleiotropy_test(dat_h) # Egger intercept
  62. loo <- mr_leaveoneout(dat_h)
  63. # Plot
  64. p_loo <- mr_leaveoneout_plot(loo)
  65. print(p_loo[[1]])
  66. steiger <- directionality_test(dat_h) # Steiger
  67. # MR-PRESSO (global test + outliers + distortion)
  68. set.seed(1)
  69. mrp <- mr_presso(BetaOutcome = "beta.outcome",
  70. BetaExposure = "beta.exposure",
  71. SdOutcome = "se.outcome",
  72. SdExposure = "se.exposure",
  73. OUTLIERtest = TRUE,
  74. DISTORTIONtest = TRUE,
  75. data = as.data.frame(dat_h),
  76. NbDistribution = 1000, SignifThreshold = 0.05)
  77. # OUTPUTS
  78. print(mr_main)
  79. print(het)
  80. print(pleio)
  81. print(steiger)
  82. print(mrp)
  83. library(knitr)
  84. # print markdown table
  85. kable(mr_main, format = "markdown")
  86. #-------------------------------------------------------------------------------
  87. library(ggplot2)
  88. # 1) Pull rows from TwoSampleMR results
  89. get_row <- function(d, pattern) d[grepl(pattern, d$method), ][1, ]
  90. ivw_re <- get_row(mr_main, "Inverse variance weighted \\(multiplicative random effects\\)|Inverse variance weighted \\(random effects\\)")
  91. egger <- get_row(mr_main, "^MR Egger")
  92. wm <- get_row(mr_main, "^Weighted median")
  93. # 2) Pull MR-PRESSO outlier-corrected estimate (if available)
  94. presso_df <- tryCatch(as.data.table(mrp$`Main MR results`), error = function(e) NULL)
  95. oc <- if (!is.null(presso_df)) presso_df[grepl("Outlier", `MR Analysis`, ignore.case = TRUE)] else NULL
  96. # 3) Build a tidy table of estimates on the log-OR scale
  97. est <- rbindlist(list(
  98. data.table(Method = "IVW (RE)", beta = ivw_re$b, se = ivw_re$se),
  99. if (!is.null(oc) && nrow(oc)) data.table(Method = "IVW (MR-PRESSO outlier-corrected)",
  100. beta = as.numeric(oc$`Causal Estimate`),
  101. se = as.numeric(oc$Sd)) else NULL,
  102. data.table(Method = "MR-Egger", beta = egger$b, se = egger$se),
  103. data.table(Method = "Weighted median", beta = wm$b, se = wm$se)
  104. ), use.names = TRUE, fill = TRUE)
  105. # 4) Convert to ORs and 95% CIs
  106. est[, `:=`(
  107. OR = exp(beta),
  108. LCI = exp(beta - 1.96 * se),
  109. UCI = exp(beta + 1.96 * se)
  110. )]
  111. est[, Method := factor(Method, levels = c("IVW (RE)", "IVW (MR-PRESSO outlier-corrected)", "MR-Egger", "Weighted median"))]
  112. x_min <- floor(min(est$LCI, na.rm = TRUE) * 100) / 100
  113. x_max <- ceiling(max(est$UCI, na.rm = TRUE) * 100) / 100
  114. p_mr1 <- ggplot(est, aes(x = OR, y = Method)) +
  115. geom_vline(xintercept = 1, linetype = "dashed") +
  116. geom_point(size = 2) +
  117. geom_errorbarh(aes(xmin = LCI, xmax = UCI), height = 0.15) +
  118. scale_x_continuous(limits = c(x_min, x_max),
  119. expand = expansion(mult = c(0.02, 0.08))) +
  120. coord_cartesian(clip = "off") + # <- don't clip at panel edge
  121. labs(x = "Odds ratio (per SD higher Ferritin)", y = NULL,
  122. title = "Figure MR1. Causal estimates across MR estimators") +
  123. theme_minimal(base_size = 12) +
  124. theme(
  125. panel.grid.minor = element_blank(),
  126. plot.margin = margin(t = 8, r = 24, b = 8, l = 8) # extra right margin
  127. )
  128. print(p_mr1)
  129. ggsave("Figure_MR1_forest.png", p_mr1,
  130. width = 7.5, height = 4.0, dpi = 300, limitsize = FALSE)
  131. ggsave("Figure_MR1_forest.pdf", p_mr1,
  132. width = 7.5, height = 4.0, useDingbats = FALSE)
  133. print(p_mr1)
  134. ggsave("Figure_MR1_forest.png", p_mr1,
  135. width = 7.5, height = 4.0, dpi = 300, limitsize = FALSE)
  136. ggsave("Figure_MR1_forest.pdf", p_mr1, width = 6.0, height = 3.5)
  137. #-------------------------------------------------------------------------------
  138. suppressPackageStartupMessages({
  139. library(ggplot2)
  140. library(ggrepel)
  141. library(dplyr)
  142. library(scales)
  143. })
  144. # Pull MR-PRESSO outlier rsIDs
  145. get_presso_outliers <- function(mrp_obj){
  146. tryCatch({
  147. ot <- mrp_obj[["MR-PRESSO results"]][["Outlier Test"]][["Outliers"]]
  148. if (is.null(ot) || !is.data.frame(ot) || nrow(ot) == 0) return(character(0))
  149. pick <- intersect(c("SNP","rsid","Name","Outlier"), names(ot))
  150. if (length(pick) == 0) return(character(0))
  151. unique(as.character(ot[[pick[1]]]))
  152. }, error = function(e) character(0))
  153. }
  154. # pick one slope per method (prefer IVW random-effects if present)
  155. pick_b <- function(df, exact_names, fallback_pattern = NULL){
  156. hits <- which(df$method %in% exact_names)
  157. if (length(hits) > 0) return(df$b[hits[1]])
  158. if (!is.null(fallback_pattern)) {
  159. hits <- which(grepl(fallback_pattern, df$method))
  160. if (length(hits) > 0) return(df$b[hits[1]])
  161. }
  162. NA_real_
  163. }
  164. b_ivw <- pick_b(
  165. mr_main,
  166. exact_names = c("Inverse variance weighted (multiplicative random effects)",
  167. "Inverse variance weighted (random effects)"),
  168. fallback_pattern = "^Inverse variance weighted$"
  169. )
  170. b_egger <- pick_b(mr_main, exact_names = c("MR Egger"), fallback_pattern = "Egger")
  171. b_wmed <- pick_b(mr_main, exact_names = c("Weighted median"), fallback_pattern = "Weighted median")
  172. egger_int <- if (!is.null(pleio$egger_intercept)) pleio$egger_intercept[1] else NA_real_
  173. if (is.na(egger_int)) egger_int <- 0 # safe default if Egger intercept not returned
  174. # one row per line to draw
  175. line_df <- data.frame(
  176. method = c("IVW (RE)", "MR-Egger", "Weighted median"),
  177. slope = c(b_ivw, b_egger, b_wmed),
  178. intercept = c(0, egger_int, 0),
  179. linetype = c("solid", "dashed", "dotdash"),
  180. stringsAsFactors = FALSE
  181. )
  182. presso_outliers <- get_presso_outliers(mrp)
  183. # ======================================================================
  184. # S-MR1. MR scatter (with IVW / MR-Egger / weighted-median lines)
  185. # ======================================================================
  186. scatter_df <- as.data.frame(dat_h)
  187. scatter_df$group <- ifelse(scatter_df$SNP %in% presso_outliers,
  188. "PRESSO outlier", "Instrument")
  189. line_df <- tibble(
  190. method = c("IVW (RE)", "MR-Egger", "Weighted median"),
  191. slope = c(b_ivw, b_egger, b_wmed),
  192. intercept = c(0, egger_int, 0),
  193. linetype = c("solid", "dashed", "dotdash")
  194. )
  195. p_scatter <- ggplot(scatter_df, aes(beta.exposure, beta.outcome)) +
  196. geom_hline(yintercept = 0, colour = "grey85") +
  197. geom_vline(xintercept = 0, colour = "grey85") +
  198. geom_point(aes(shape = group), size = 2.4, alpha = 0.9) +
  199. geom_abline(data = line_df,
  200. aes(slope = slope, intercept = intercept, linetype = method),
  201. linewidth = 0.9, show.legend = TRUE) +
  202. scale_shape_manual(values = c("Instrument" = 16, "PRESSO outlier" = 17)) +
  203. scale_linetype_manual(values = c("solid", "dashed", "dotdash")) +
  204. labs(title = "Supplementary Figure S-MR1. MR scatter plot",
  205. x = "SNP effect on Ferritin (beta)",
  206. y = "SNP effect on Delirium (beta)",
  207. linetype = "Estimator", shape = NULL) +
  208. theme_minimal(base_size = 12) +
  209. theme(panel.grid.minor = element_blank(),
  210. legend.position = "bottom",
  211. plot.margin = margin(10, 70, 10, 10)) +
  212. coord_cartesian(clip = "off")
  213. if (length(presso_outliers) > 0) {
  214. p_scatter <- p_scatter +
  215. ggrepel::geom_text_repel(
  216. data = subset(scatter_df, SNP %in% presso_outliers),
  217. aes(label = SNP), size = 3, max.overlaps = Inf
  218. )
  219. }
  220. ggsave("Supp_Figure_S-MR1_scatter.png", p_scatter,
  221. width = 7.5, height = 5.0, dpi = 300, bg = "white", limitsize = FALSE)
  222. # ======================================================================
  223. # S-MR2. Funnel plot (per-SNP ratio estimates)
  224. # ======================================================================
  225. single <- mr_singlesnp(dat_h)
  226. p_funnel <- mr_funnel_plot(single)[[1]] +
  227. labs(title = "Supplementary Figure S-MR2. Funnel plot",
  228. x = "Causal estimate (Wald ratio per SNP)",
  229. y = "SE of ratio") +
  230. theme_minimal(base_size = 12) +
  231. theme(legend.position = "none")
  232. ggsave("Supp_Figure_S-MR2_funnel.png", p_funnel,
  233. width = 7.0, height = 5.0, dpi = 300, bg = "white", limitsize = FALSE)
  234. # ======================================================================
  235. # S-MR3. Leave-one-out influence plot
  236. # ======================================================================
  237. loo <- mr_leaveoneout(dat_h)
  238. p_loo <- mr_leaveoneout_plot(loo)[[1]] +
  239. labs(title = "Supplementary Figure S-MR3. Leave-one-out influence plot",
  240. y = "IVW estimate") +
  241. theme_minimal(base_size = 12)
  242. ggsave("Supp_Figure_S-MR3_leaveoneout.png", p_loo,
  243. width = 7.0, height = 5.0, dpi = 300, bg = "white", limitsize = FALSE)
  244. # ======================================================================
  245. # S-MR4. MR-PRESSO outlier map (studentized residuals vs leverage)
  246. # ======================================================================
  247. ivw_fit <- lm(beta.outcome ~ beta.exposure,
  248. weights = 1/(se.outcome^2),
  249. data = scatter_df)
  250. press_df <- scatter_df %>%
  251. mutate(leverage = hatvalues(ivw_fit),
  252. stud_res = rstudent(ivw_fit),
  253. outlier = SNP %in% presso_outliers)
  254. # Pull MR-PRESSO p-values (best-effort; shows NA if structure differs)
  255. safe_get <- function(x, path, default = NA){
  256. tryCatch({ for (nm in path) x <- x[[nm]]; x }, error = function(e) default)
  257. }
  258. p_glob <- safe_get(mrp, c("MR-PRESSO results","Global Test","Pvalue"))
  259. p_dist <- safe_get(mrp, c("MR-PRESSO results","Distortion Test","Pvalue"))
  260. subtxt <- sprintf("Global p = %s; Distortion p = %s; Outliers = %d",
  261. ifelse(is.na(p_glob), "NA", formatC(p_glob, format = "e", digits = 2)),
  262. ifelse(is.na(p_dist), "NA", formatC(p_dist, format = "e", digits = 2)),
  263. length(presso_outliers))
  264. p_presso <- ggplot(press_df, aes(leverage, stud_res, colour = outlier)) +
  265. geom_hline(yintercept = c(-3, 0, 3),
  266. linetype = c("dotted", "solid", "dotted"), colour = "grey70") +
  267. geom_point(size = 2.3, alpha = 0.9) +
  268. scale_color_manual(values = c("FALSE" = "grey30", "TRUE" = "firebrick"),
  269. labels = c("Instrument", "PRESSO outlier")) +
  270. labs(title = "Supplementary Figure S-MR4. MR-PRESSO outlier map",
  271. subtitle = subtxt,
  272. x = "Leverage (hat values from IVW fit)",
  273. y = "Studentized residuals",
  274. colour = NULL) +
  275. theme_minimal(base_size = 12) +
  276. theme(legend.position = "bottom",
  277. plot.margin = margin(10, 70, 10, 10)) +
  278. coord_cartesian(clip = "off")
  279. if (length(presso_outliers) > 0) {
  280. p_presso <- p_presso +
  281. ggrepel::geom_text_repel(
  282. data = subset(press_df, outlier),
  283. aes(label = SNP), size = 3, max.overlaps = Inf
  284. )
  285. }
  286. ggsave("Supp_Figure_S-MR4_presso_map.png", p_presso,
  287. width = 7.2, height = 5.2, dpi = 300, bg = "white", limitsize = FALSE)

Ferritin-Delirium Two sample MR.R at commit 1160c18, under MIT · at the source

Overview

  1. School of Medicine, Shahid Beheshti University of Medical Sciences,Tehran, Iran
  2. Cellular and Molecular Endocrine Research Center, Research Institute for Endocrine Molecular Biology, Research Institute for Endocrine Sciences, Shahid Beheshti University of Medical Sciences,PO Box: 1985717413, Tehran, Iran
  3. Endocrine Research Center, Research Institute for Endocrine Sciences, Shahid Beheshti University of Medical Sciences,Tehran, Iran
Journal: Human genomics, volume 20, issue 1, article 97
Dates: received 7 February 2026; accepted 19 April 2026; published online 25 April 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1186/s40246-026-00972-5 · PMID 42035214 · PMCID PMC13262423 · OpenAlex W7155623613
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: genetics / omics (modality), human (organism), other condition (population), clinical / translational (subfield)
Methods: Statistics
Keywords: Delirium, Ferritin, Mendelian randomization, Colocalization, Multi-omics
MeSH: Delirium*, Ferritins*, Genetic Predisposition to Disease, Genome-Wide Association Study, Genomics, Humans, Iron, Polymorphism, Single Nucleotide, Quantitative Trait Loci, Risk Factors (* major topic)
Topic: Iron Metabolism and Disorders (Hematology, Medicine), according to OpenAlex
Citations: not cited yet (Europe PMC); 29 references in the paper

Abstract

Background: Delirium is an acute neuropsychiatric syndrome characterized by disrupted attention and cognition, often triggered by systemic inflammation and physiological stress. Elevated serum ferritin is frequently observed in patients with delirium. Since ferritin couples iron handling to inflammatory signaling during acute-phase responses, it remains unclear whether genetically influenced baseline serum ferritin is a modifiable causal risk factor for delirium, or whether ferritin elevations observed during illness mainly reflect downstream systemic states leading to brain network failure. We used genetic triangulation to assess baseline causality and identify regulatory mechanisms influencing delirium susceptibility.

Results: Using harmonized GWAS summary statistics for ferritin (GCST90270865; N = 270,794) and delirium (GCST90473243; 8461 cases, 449,979 controls), we found no evidence that genetically proxied increases in ferritin causally raise delirium risk (primary MR: IVW random-effects OR = 1.09 per 1/SD ferritin, 95% CI 0.93–1.26; p = 0.282). Genome-wide overlap was limited, with weak, non-significant cross-trait genetic correlation and minimal shared polygenic signal. Mechanistic follow-up at the locus level across multi-tissue QTL resources identified widespread ferritin-linked cis-QTL signals (255 probes, 126 genes), while delirium showed sparse mediator signals (four probes, three genes), all on chromosome 19. At 19q13, ferritin strongly colocalized with an APOE plasma pQTL (PP.H4 = 0.999; SuSiE PP.H4 ≈ 1.00), whereas delirium colocalized with a cortex CEACAM19 eQTL (PP.H4 = 0.9983). Outside 19q13, ferritin colocalized with iron regulation signals at SLC11A2 whole-blood eQTL (PP.H4 = 0.853) and TF liver sQTL (PP.H4 = 0.966), with no evidence of ferritin–delirium colocalization.

Conclusions: Genetic evidence does not support baseline ferritin as a primary, modifiable causal factor for delirium risk. Instead, inherited susceptibility appears locus-specific and seems to align with brain regulatory mechanisms, including a cortical signal at 19q13, distinct from iron homeostasis. These findings emphasize the need for mechanistic and preventive research targeting brain-relevant pathways other than systemic iron management for delirium prevention.

Supplementary Information: The online version contains supplementary material available at10.1186/s40246-026-00972-5.

Reproduced under the paper's license (CC BY), from the paper cited above.

Repositories

Its files are read in the Code ↔ Paper reader above, with 17 matches between paragraphs and lines of code.

amjahromizadeh/Ferritin-Delirium

License: MIT
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 1160c187e6a191803004addd2ad29c1d440ce5f4, 4 July 2026
Languages: R (16)
Size: 54 files, 16 scripts
Software Heritage: not archived
Found in: “Data availability”
Holds: README, license file, documentation, 1 notebook
Not found: CITATION.cff, environment file, tests, continuous integration
Tools: data.table (16 files), ggplot2 (2 files), tidyverse (2 files), pheatmap (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
18 files

Zenodo 18135973

License: MIT
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: “Data availability”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: data.table (19 files), ggplot2 (2 files), tidyverse (2 files), pheatmap (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers (HTTP 200)
  • 30 September 2026: the link answers (HTTP 200)
21 files
At the source:

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:

  • 2 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 35 scripts, each with its path and the digest of its content;
  • 17 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

Data availability

Ferritin GWAS summary statistics are available via the GWAS Catalog (accession GCST90270865), and delirium GWAS summary statistics are available via the GWAS Catalog (accession GCST90473243). The QTL summary datasets used for SMR/HEIDI and colocalization analyses (eQTL/sQTL/pQTL/mQTL panels, including GTEx, eQTLGen, OpenGWAS pQTL resources, and GoDMC mQTL resources) are publicly available from their respective providers and were accessed under the terms specified by those resources. All analysis code, processed outputs, and an interactive supplementary HTML are available in the Zenodo repository:(10.5281/zenodo.18135973). The development repository is available at (https://github.com/amjahromizadeh/Ferritin-Delirium).

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, 30 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 10 authors, 5 keywords, 10 MeSH terms, 27 references.

Cite

This paper

Saed, A., Akbarzadeh, M., Gohari, F., Asadrouh, N., Jahromizadeh, A. M., Sabaie, H., Zarkesh, M., Hedayati, M., Azizi, F., & Daneshpour, M. S. (2026). Serum ferritin and delirium risk: an integrative genomic analysis of causal inference and multi-tissue regulatory signals. Human genomics, 20(1), 97. https://doi.org/10.1186/s40246-026-00972-5

BibTeX

@article{saed2026serum,
author = {Saed, Amirhossein and Akbarzadeh, Mahdi and Gohari, Fatemeh and Asadrouh, Nafiseh and Jahromizadeh, Amir Mohammad and Sabaie, Hani and Zarkesh, Maryam and Hedayati, Mehdi and Azizi, Fereidoun and Daneshpour, Maryam Sadat},
title = {{Serum ferritin and delirium risk: an integrative genomic analysis of causal inference and multi-tissue regulatory signals}},
journal = {Human genomics},
year = {2026},
month = apr,
volume = {20},
number = {1},
pages = {97},
publisher = {BMC},
issn = {1473-9542},
doi = {10.1186/s40246-026-00972-5},
url = {https://doi.org/10.1186/s40246-026-00972-5},
pmid = {42035214},
pmcid = {PMC13262423}
}

RIS

TY - JOUR
AU - Saed, Amirhossein
AU - Akbarzadeh, Mahdi
AU - Gohari, Fatemeh
AU - Asadrouh, Nafiseh
AU - Jahromizadeh, Amir Mohammad
AU - Sabaie, Hani
AU - Zarkesh, Maryam
AU - Hedayati, Mehdi
AU - Azizi, Fereidoun
AU - Daneshpour, Maryam Sadat
TI - Serum ferritin and delirium risk: an integrative genomic analysis of causal inference and multi-tissue regulatory signals
T2 - Human genomics
J2 - Hum Genomics
PY - 2026
DA - 2026/04/25
VL - 20
IS - 1
SP - 97
SN - 1473-9542
PB - BMC
DO - 10.1186/s40246-026-00972-5
UR - https://doi.org/10.1186/s40246-026-00972-5
LA - en
ER -

CSL-JSON

{
"id": "10.1186/s40246-026-00972-5",
"type": "article-journal",
"title": "Serum ferritin and delirium risk: an integrative genomic analysis of causal inference and multi-tissue regulatory signals",
"container-title": "Human genomics",
"author": [
{
"family": "Saed",
"given": "Amirhossein"
},
{
"family": "Akbarzadeh",
"given": "Mahdi"
},
{
"family": "Gohari",
"given": "Fatemeh"
},
{
"family": "Asadrouh",
"given": "Nafiseh"
},
{
"family": "Jahromizadeh",
"given": "Amir Mohammad"
},
{
"family": "Sabaie",
"given": "Hani"
},
{
"family": "Zarkesh",
"given": "Maryam"
},
{
"family": "Hedayati",
"given": "Mehdi"
},
{
"family": "Azizi",
"given": "Fereidoun"
},
{
"family": "Daneshpour",
"given": "Maryam Sadat"
}
],
"container-title-short": "Hum Genomics",
"volume": "20",
"issue": "1",
"page": "97",
"DOI": "10.1186/s40246-026-00972-5",
"PMID": "42035214",
"PMCID": "PMC13262423",
"ISSN": "1473-9542",
"publisher": "BMC",
"URL": "https://doi.org/10.1186/s40246-026-00972-5",
"language": "en",
"issued": {
"date-parts": [
[
2026,
4,
25
]
]
}
}

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/s41467-026-72164-7 [code]
Multivariate genetic analysis reveals three distinct pathological dimensions in musculoskeletal disorders.
Journal: Nature communications
In common: pheatmap, data.table, ggplot2, 1 other tool, genetics / omics, 2 references
[2] doi:10.1038/s41588-026-02646-3 [code]
Co-expression-based models improve eQTL predictions for transcriptome-wide association studies and highlight new schizophrenia-associated genes.
Journal: Nature genetics
In common: pheatmap, data.table, tidyverse, genetics / omics, 2 references
[3] doi:10.1002/imt2.70163 [code]
Spatial multi-omics unveils sphingolipid metabolic reprogramming within the retinal pathological niche.
Journal: iMeta
In common: pheatmap, data.table, ggplot2, 1 other tool, genetics / omics, 1 reference
[4] doi:10.3390/biomedicines14081677 [code]
Exploratory Genome and Transcriptome-Wide Association Analyses of Addiction-Related Phenotypes in a Twin Cohort.
Journal: Biomedicines
In common: data.table, ggplot2, tidyverse, genetics / omics, other condition, 2 references
[5] doi:10.1186/s12916-026-04869-x [code]
The tissue-specific effects of glucose-lowering drug targets on aging mediated through DNA methylation: a multi-omics genetic study.
Journal: BMC medicine
In common: data.table, ggplot2, tidyverse, genetics / omics, other condition, 2 references
[6] doi:10.1038/s41467-026-75193-4 [code]
Multi-ancestry gene expression models amplify transcriptome-wide association study discovery and validation.
Journal: Nature communications
In common: pheatmap, data.table, ggplot2, 1 other tool, genetics / omics, 1 reference
[7] doi:10.1038/s41467-026-72598-z [code]
Functional impact of genetic background on variable expressivity in neurodevelopmental disorders.
Journal: Nature communications
In common: pheatmap, data.table, ggplot2, 1 other tool, other condition, 1 reference
[8] doi:10.1093/neuonc/noag128 [code]
Spatially-resolved single-cell imaging of melanoma brain metastases identifies localized immune patterns predictive of immune checkpoint blockade response.
Journal: Neuro-oncology
In common: pheatmap, data.table, ggplot2, 1 other tool, clinical / translational, genetics / omics, other condition
[9] doi:10.1038/s41562-026-02486-5 [code]
Genome-wide association studies of infant and toddler temperament in European and multi-ancestry populations.
Journal: Nature human behaviour
In common: data.table, ggplot2, tidyverse, genetics / omics, 2 references
[10] doi:10.1038/s41467-026-71738-9 [code]
Genetic landscape of adult executive function reveals a cell-type-specific developmental origin.
Journal: Nature communications
In common: data.table, ggplot2, tidyverse, genetics / omics, 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.

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.