OSCR

Mapping the causal chain from genetic risk variants to lipid dysmetabolism in Parkinson's disease.

Code ↔ Paper

11 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 11 matches
  1. [1] § Materials and methods › Quantitative trait locus analysis ↔ co-localization_and_MR_clean.R, lines 374–430 · score 0.96 · peqtl heidi, peqtl smr, co localization, beqtl summary, smr multi, gwas summary
  2. [2] § Materials and methods › Quantitative trait locus analysis ↔ co-localization_and_MR_clean.R, lines 84–134 · score 0.95 · posterior probabilities, pp h4, common causal variant, Co localization, B3GALNT1, eQTLs
  3. [3] § Results › PD risk variants colocalize with SPTSSB expression in brain and fatty acid perturbations in blood ↔ co-localization_and_MR_clean.R, lines 84–134 · score 0.92 · posterior probability, pp h4, common causal variant, PPM1L, B3GALNT1, mQTL
  4. [4] § Results › PD risk variants colocalize with SPTSSB expression in brain and fatty acid perturbations in blood ↔ co-localization_and_MR_clean.R, lines 44–82 · score 0.82 · BrainMeta, inhibitory neurons, RNA seq, excitatory neurons, eQTL, tibial
  5. [5] § Materials and methods › Metabolomics ↔ mass-spec_differential_expression_clean.R, lines 1–41 · score 0.69 · mass spectrometry, plasma metabolites, HD4, batch, imputed, transformed
  6. [6] § Results › PD risk variants colocalize with SPTSSB expression in brain and fatty acid perturbations in blood ↔ co-localization_and_MR_clean.R, lines 182–220 · score 0.65 · mQTLs, plasma heptanoate, eQTL, colocalization, SMR, genome
  7. [7] § Materials and methods › Metabolomics ↔ metabolomics_preprocessing_clean.R, lines 1–41 · score 0.62 · Metabolon HD4, metabolite abundance, imputed, transformed, scores, BCM
  8. [8] § Materials and methods › Human subjects ↔ co-localization_and_MR_clean.R, lines 44–82 · score 0.60 · inhibitory neurons, RNA seq, nucleus, cortex, excitatory, ROSMAP
  9. [9] § Materials and methods › Quantitative trait locus analysis ↔ additive_recessive_models_clean.R, lines 41–111 · score 0.55 · linear models, Additive, recessive, cohort, sex, sphingolipids
  10. [10] § Materials and methods › Analysis of differential metabolites ↔ mass-spec_differential_expression_clean.R, lines 180–222 · score 0.54 · regression models, Volcano, overlap, LRT, Linear, AD
  11. [11] § Materials and methods › Proteomics ↔ mass-spec_differential_expression_clean.R, lines 1–41 · score 0.52 · mass spectrometry, proteomic, imputed, transformed, scores, ROSMAP

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 · 469 lines · 28 KB · no license · 6 matches

  1. # Pipeline by Ruth De Paula
  2. ## Co-localization and SMR analysis ##
  3. # Coloc pipeline was adapted from Senkevich et al., 2023: https://pubmed.ncbi.nlm.nih.gov/36370000/
  4. options(digits=22) ## necessary to ensure R is going to read big key numbers
  5. ### 1. Co-localization with GWAS-eQTLs and GWAS-mQTLs ----
  6. setwd("/mnt/belinda_local/ruth/data/omics_integration/colocalization_analysis")
  7. # GitHub file: https://github.com/gan-orlab/GALC/blob/main/coloc (Senkevich et al., 2023)
  8. library(coloc) # Original coloc package, which is used to run coloc.abf() and sensitivity()
  9. library(colochelpR) # Helper package with wrapper functions
  10. library(data.table) # Loaded for fread(), which permits fast loading of files with many rows
  11. library(ggpubr) # For formatting of plots
  12. library(here) # For file path construction
  13. library(purrr)
  14. library(dplyr)
  15. library(dbplyr)
  16. library(tibble)
  17. library(locuscomparer)
  18. library(stringr)
  19. library(ggplot2)
  20. library(ggrepel)
  21. #### Preparing datasets for coloc ----
  22. # Will use hg19 files, to be consistent w/ SMR MR analysis later (SMR already provides formatted QTLs in hg19).
  23. # Coloc GWAS-QTL file mandatory columns should be (first half comes from GWAS file, and second half comes from QTL file):
  24. # "b_MA.gwas","varbeta.gwas","p_value.gwas","b_MA.eqtl","varbeta.eqtl","MAF.eqtl","p_value.eqtl","snp (rsid)"
  25. # If you don't have "b_MA", "MAF", and "varbeta" columns, calculate them this way:
  26. # SPTSSB_eqtl$b_MA <- SPTSSB_eqtl$Effect
  27. # SPTSSB_eqtl[SPTSSB_eqtl$Freq1 > 0.50, ]$b_MA <- SPTSSB_eqtl[SPTSSB_eqtl$Freq1 > 0.50, ]$b_MA *-1
  28. #
  29. # SPTSSB_eqtl$MAF <- SPTSSB_eqtl$Freq1
  30. # SPTSSB_eqtl[SPTSSB_eqtl$Freq1 > 0.50, ]$MAF <- 1 - SPTSSB_eqtl[SPTSSB_eqtl$Freq1 > 0.50, ]$MAF
  31. #
  32. # SPTSSB_eqtl$varbeta = SPTSSB_eqtl$StdErr*SPTSSB_eqtl$StdErr
  33. # BESD eQTL files were downloaded from here: https://yanglab.westlake.edu.cn/software/smr/#DataResource
  34. # eQTLs were extracted from SMR BESD files, using the following command line:
  35. # smr-1.3.1-linux-x86_64/smr --beqtl-summary BrainMeta_cis_eqtl_summary/BrainMeta_cis_eQTL_chr3 --query 1 --snp-chr 3 --from-snp-kb 160577 --to-snp-kb 161678 --out SPTSSB_locus_cis_eQTL_BrainMeta_query_ALL_GENES
  36. # nerve <- read.table("nerve_tibial_hg19_df_for_SPTSSB_coloc_ALL_GENES.txt", header=T, sep="\t") # nerve tibial GTEx SPTSSB eQTL
  37. # hypothalamus <- read.table("hypothalamus_hg19_df_for_SPTSSB_coloc_ALL_GENES.txt", header=T, sep="\t") # hypothalamus GTEx SPTSSB eQTL
  38. # cerebellum <- read.table("cerebellum_hg19_df_for_SPTSSB_coloc_ALL_GENES.txt", header=T, sep="\t") # cerebellum GTEx SPTSSB eQTL
  39. # blood <- read.table("whole_blood_hg19_df_for_SPTSSB_coloc_ALL_GENES.txt", header=T, sep="\t") # whole blood GTEx SPTSSB eQTL
  40. # accumbens <- read.table("nucleus_accumbens_hg19_df_for_SPTSSB_coloc_ALL_GENES.txt", header=T, sep="\t") # nucleus accumbens GTEx SPTSSB eQTL
  41. # cortex <- read.table("brain_cortex_hg19_df_for_SPTSSB_coloc_ALL_GENES.txt", header=T, sep="\t") # brain cortex BrainMeta SPTSSB eQTL
  42. blood <- read.table("whole_blood_hg19_df_for_SPTSSB_coloc_ALL_GENES_case-control.txt", header=T, sep="\t") # whole blood GTEx SPTSSB eQTL
  43. cortex <- read.table("brain_cortex_hg19_df_for_SPTSSB_coloc_ALL_GENES_case-control.txt", header=T, sep="\t") # brain cortex BrainMeta SPTSSB eQTL
  44. cortex <- cortex[cortex$Probe %in% "ENSG00000196542.8",]
  45. # For single-cell, no genes were detected for SPTSSB locus in endothelial_cells
  46. excitatory <- read.table("excitatory_neurons_hg19_df_for_SPTSSB_coloc_ALL_GENES_case-control.txt", header=T, sep="\t") # brain DLPFC ROSMAP snRNA-seq eQTL
  47. # microglia <- read.table("microglia_hg19_df_for_SPTSSB_coloc_ALL_GENES_case-control.txt", header=T, sep="\t") # brain DLPFC ROSMAP snRNA-seq eQTL; unfortunately, no SPTSSB eQTLs detected
  48. oligo <- read.table("oligodendrocytes_hg19_df_for_SPTSSB_coloc_ALL_GENES_case-control.txt", header=T, sep="\t") # brain DLPFC ROSMAP snRNA-seq eQTL
  49. astro <- read.table("astrocytes_hg19_df_for_SPTSSB_coloc_ALL_GENES_case-control.txt", header=T, sep="\t") # brain DLPFC ROSMAP snRNA-seq eQTL
  50. inhibitory <- read.table("inhibitory_neurons_hg19_df_for_SPTSSB_coloc_ALL_GENES_case-control.txt", header=T, sep="\t") # brain DLPFC ROSMAP snRNA-seq eQTL
  51. # OPC <- read.table("OPC_hg19_df_for_SPTSSB_coloc_ALL_GENES_case-control.txt", header=T, sep="\t") # brain DLPFC ROSMAP snRNA-seq eQTL; unfortunately, no SPTSSB eQTLs detected
  52. # mQTL summary stats were downloaded from here: https://omicscience.org/apps/mgwas/mgwas.table.php
  53. # heptanoate <- read.table("heptanoate_hg19_df_for_SPTSSB_coloc.txt", header=T, sep="\t") # plasma Surendran mQTL
  54. # oleate <- read.table("oleate-vaccenate_hg19_df_for_SPTSSB_coloc.txt", header=T, sep="\t") # plasma Surendran mQTL
  55. # myristoleate <- read.table("myristoleate_hg19_df_for_SPTSSB_coloc.txt", header=T, sep="\t") # plasma Surendran mQTL
  56. # sphinganine <- read.table("sphinganine_hg19_df_for_SPTSSB_coloc.txt", header=T, sep="\t") # plasma Surendran mQTL
  57. heptanoate <- read.table("heptanoate_hg19_df_for_SPTSSB_coloc_case-control.txt", header=T, sep="\t") # plasma Surendran mQTL - allele 2 is effect allele
  58. oleate <- read.table("oleate-vaccenate_hg19_df_for_SPTSSB_coloc_case-control.txt", header=T, sep="\t") # plasma Surendran mQTL - allele 2 is effect allele
  59. myristoleate <- read.table("myristoleate_hg19_df_for_SPTSSB_coloc_case-control.txt", header=T, sep="\t") # plasma Surendran mQTL - allele 2 is effect allele
  60. sphinganine <- read.table("sphinganine_hg19_df_for_SPTSSB_coloc_case-control.txt", header=T, sep="\t") # plasma Surendran mQTL - allele 2 is effect allele
  61. CERd20_1_24_0 <- read.table("CERd20-1_24-0_hg19_df_for_SPTSSB_coloc_case-control.txt", header=T, sep="\t") # plasma Cadby mQTL
  62. CERd20_1_24_1 <- read.table("CERd20-1_24-1_hg19_df_for_SPTSSB_coloc_case-control.txt", header=T, sep="\t") # plasma Cadby mQTL
  63. dhCERd18_0_18_0 <- read.table("dhCERd18-0_18-0_hg19_df_for_SPTSSB_coloc_case-control.txt", header=T, sep="\t") # plasma Cadby mQTL
  64. SM43_1 <- read.table("SM43-1_hg19_df_for_SPTSSB_coloc_case-control.txt", header=T, sep="\t") # plasma Cadby mQTL
  65. DE22_6 <- read.table("DE22-6_hg19_df_for_SPTSSB_coloc_case-control.txt", header=T, sep="\t") # plasma Cadby mQTL
  66. # Select QTL list of interest
  67. df <- CERd20_1_24_1
  68. unique(df$Gene) # see which genes of interest have eQTLs
  69. QTL <- "CERd20_1_24_1_mQTL_SPTSSB_PD-GWAS"
  70. # Select gene eQTLs of interest
  71. df_sub <- df[df$Gene == "SPTSSB", ]
  72. df_sub <- df[df$Gene == "PPM1L", ]
  73. df_sub <- df[df$Gene == "B3GALNT1", ]
  74. df_sub <- df[df$Gene == "NMD3", ]
  75. # df_sub <- df[df$Gene == "OTOL1", ]
  76. # Remove zeroed/duplicated SNPs
  77. df_sub <- df_sub[!(df_sub$snp %in% df_sub$snp[duplicated(df_sub$snp)]), ]
  78. #### Run coloc ----
  79. ## GWAS vs. QTL
  80. res <- coloc.abf(dataset1=list(beta=df_sub$b_MA.gwas, varbeta=df_sub$varbeta.gwas, type="cc", snp=df_sub$snp, pvalue=df_sub$p_value),
  81. dataset2=list(beta=df_sub$b_MA.eqtl, varbeta=df_sub$varbeta.eqtl, N=nrow(df_sub), MAF=as.numeric(df_sub$MAF.eqtl), type="quant", snp=df_sub$snp, pvalue=df_sub$P.value))
  82. ## eQTL vs. mQTL
  83. # Re-format input
  84. eQTL <- excitatory[,c(3,15:ncol(excitatory))] # snRNA-seq
  85. # eQTL <- cortex[,c(2:3,15:ncol(cortex))] # bulk RNA-seq
  86. mQTL <- heptanoate[,c(3,15:ncol(heptanoate))]
  87. df <- merge(eQTL, mQTL, by="SNP_ID")
  88. df_sub <- df[df$Gene.x == "SPTSSB", ]
  89. df_sub <- df_sub[!(df_sub$snp %in% df_sub$snp[duplicated(df_sub$snp)]), ]
  90. # Run
  91. res <- coloc.abf(dataset1=list(beta=df_sub$b_MA.eqtl.x, varbeta=df_sub$varbeta.eqtl.x, N=nrow(df_sub), MAF=as.numeric(df_sub$MAF.eqtl.x), type="quant", snp=df_sub$snp, pvalue=df_sub$P.value.x),
  92. dataset2=list(beta=df_sub$b_MA.eqtl.y, varbeta=df_sub$varbeta.eqtl.y, N=nrow(df_sub), MAF=as.numeric(df_sub$MAF.eqtl.y), type="quant", snp=df_sub$snp, pvalue=df_sub$P.value.y))
  93. results <- as.data.frame(t(res$summary))
  94. results
  95. all_res_output_name <- paste0("Cadby_", QTL, "_case-control.tsv")
  96. # all_res_output_name <- paste0("GTEx-Surendran_", QTL, ".tsv")
  97. write.table(results, all_res_output_name, sep = "\t")#, quote = F, row.names = F)
  98. #### Stats per SNP instead of per region ----
  99. # In colocalization analysis, the most important or significant SNPs are typically those
  100. # that have the highest posterior probabilities of being shared causal variants across traits.
  101. # Specifically, these SNPs are those with high posterior probabilities of colocalization
  102. # (i.e., shared causal variants), particularly from models like PP.H4 (common causal variant).
  103. o <- order(res$results$SNP.PP.H4,decreasing=TRUE)
  104. cs <- cumsum(res$results$SNP.PP.H4[o])
  105. w <- which(cs > 0.95)[1]
  106. top_snps_index <- res$results[o,][1:w,]$snp
  107. top_snps_stats <- res$results[o,][1:w,][,c("snp","SNP.PP.H4")] # High PP.H4.abf values (e.g., >0.5 or higher) suggest strong evidence for shared causality.
  108. # top_snps_index <- res$results[o,][1:20,]$snp
  109. # top_snps_stats <- res$results[o,][1:20,][,c("snp","SNP.PP.H4")] # High PP.H4.abf values (e.g., >0.5 or higher) suggest strong evidence for shared causality.
  110. top_snps <- merge(top_snps_stats, df_sub, by="snp")
  111. # save a table with SNPs
  112. top_snps_output_name <- paste0("Cadby_", QTL, "_case-control_top_snps.tsv")
  113. # top_snps_output_name <- paste0("GTEx-Surendran_", QTL, "_top_snps.tsv")
  114. write.table(top_snps, top_snps_output_name, sep = "\t", quote = F)#, row.names = F)
  115. #### Plot LocusCompare plots ----
  116. # select top SNP
  117. top_var <- top_snps[which.max(top_snps[[2]]), ]$snp
  118. top_var
  119. # Optional - instead of using top var as LD reference, use variant of choice
  120. top_var <- "rs1450522" # SPTSSB
  121. # prepare datasets for locuscompare
  122. ## GWAS vs. QTL
  123. df_sub_eqtl <- df_sub %>%
  124. dplyr::select(snp, P.value) %>%
  125. dplyr::mutate(rsid = as.character(snp)) %>%
  126. dplyr::rename(pval = P.value)
  127. df_sub_gwas <- df_sub %>%
  128. dplyr::select(snp, p_value) %>%
  129. dplyr::mutate(rsid = as.character(snp)) %>%
  130. dplyr::rename(pval = p_value)
  131. # plot significant colocalization
  132. plot <- locuscompare(in_fn1=df_sub_gwas,
  133. in_fn2=df_sub_eqtl,
  134. title1="PD GWAS",
  135. title2="Cer(d20:1/24:1) mQTL",
  136. # title2="QTL",
  137. snp=top_var,
  138. genome="hg19",
  139. population = "EUR")
  140. plot
  141. ## eQTL vs. mQTL
  142. df_sub_mqtl <- df_sub %>%
  143. dplyr::select(snp, P.value.y) %>%
  144. dplyr::mutate(rsid = as.character(snp)) %>%
  145. dplyr::rename(pval = P.value.y)
  146. df_sub_eqtl <- df_sub %>%
  147. dplyr::select(snp, P.value.x) %>%
  148. dplyr::mutate(rsid = as.character(snp)) %>%
  149. dplyr::rename(pval = P.value.x)
  150. # plot significant colocalization
  151. plot <- locuscompare(in_fn1=df_sub_eqtl,
  152. in_fn2=df_sub_mqtl,
  153. title1="Brain cortex eQTL",
  154. title2="Plasma heptanoate mQTL",
  155. # title2="QTL",
  156. snp=top_var,
  157. genome="hg19",
  158. population = "EUR")
  159. plot
  160. # save plot
  161. ggsave(filename = paste0("SPTSSB_", QTL, "_locuscompare_hg19_rs1450522_ref_case-control.pdf"),
  162. plot = plot + theme(legend.position = "none") +
  163. geom_text_repel(max.overlaps = 1000000), # Increase the limit
  164. device = "pdf",
  165. width = 12,
  166. height = 6)
  167. #________________________________________________________________________________
  168. ### 2. SMR/HEIDI Mendelian Randomization ----
  169. setwd("/mnt/belinda_local/ruth/data/omics_integration/MR_analysis")
  170. # Outcome: Clinical PD status;
  171. # Instruments: GWAS significant SNPs;
  172. # Exposure: mQTLs or eQTLs
  173. # MR pipeline (from SMR):
  174. # Github of source code: https://github.com/NIH-CARD/NDD_SMR/blob/main/scripts/SMR_v8.ipynb
  175. # Program download: https://yanglab.westlake.edu.cn/software/smr/#Download
  176. # Instructions: https://yanglab.westlake.edu.cn/software/smr/#SMR&HEIDIanalysis
  177. # Data visualization tool: https://yanglab.westlake.edu.cn/smr-portal/viewer (very similar to LocusZoom)
  178. #### Formatting GWAS summary stats ----
  179. # Basically, GWAS file mandatory columns should be:
  180. # "rsid","effect_allele","other_allele","effect_allele_frequency","beta","standard_error","p_value","N_datasets"
  181. # gwas_all <- read.table("../colocalization_analysis/SPTSSB_gwas_locus_for_coloc-MR_hg19.txt", header=T)
  182. # gwas_sig <- read.table("../colocalization_analysis/SPTSSB_gwas_locus_for_coloc-MR_0_00000005_hg19.txt", header=T)
  183. gwas_all <- read.table("../colocalization_analysis/SPTSSB_gwas_locus_for_coloc-MR_hg19_case-control.txt", header=T)
  184. gwas_sig <- read.table("../colocalization_analysis/SPTSSB_gwas_locus_for_coloc-MR_0_00000005_hg19_case-control.txt", header=T)
  185. mygwas <- gwas_sig
  186. # Optional - Replacing empty rsid fields (those are not SNVs but are still short mutations)
  187. mygwas[mygwas$SNP_ID %in% "chr3:160958484:A:AAT",]$rsid <- "rs34371992" # effect allele:other allele
  188. mygwas[mygwas$SNP_ID %in% "chr3:161093790:C:CA",]$rsid <- "rs5853931" # effect allele:other allele
  189. mygwas[mygwas$SNP_ID %in% "chr3:161096040:T:TTTG",]$rsid <- "rs149705199" # effect allele:other allele
  190. mygwas[mygwas$SNP_ID %in% "chr3:160600563:G:A",]$rsid <- "rs935497" # effect allele:other allele
  191. mygwas <- mygwas[,c("rsid","effect_allele","other_allele","effect_allele_frequency","beta","standard_error","p_value","N_datasets")]
  192. colnames(mygwas) <- c("SNP","A1","A2","freq","b","se","p","N")
  193. #### Formatting QTL summary stats (only necessary for Surendran mQTLs and ROSMAP single-cell eQTLs) ----
  194. smr_path <- "/mnt/belinda_70t/ruth_data/QTLs/for_SMR_coloc_graphs/smr-1.3.1-linux-x86_64/smr"
  195. SPTSSB_eqtl_2 <- read.table("/mnt/belinda_local/ruth/data/omics_integration/colocalization_analysis/Surendran_mGWAS_SPTSSB_data/SPTSSB_PD_GWAS_var_+-_500kb_heptanoate_only.txt", sep = '\t', header = T, stringsAsFactors = TRUE)
  196. # SPTSSB_eqtl_2 <- read.table("/mnt/belinda_local/ruth/data/omics_integration/colocalization_analysis/Surendran_mGWAS_SPTSSB_data/extract_SPTSSB_160577630_161577630_M52285.txt", sep = '\t', header = T, stringsAsFactors = TRUE) # oleate-vaccenate
  197. # SPTSSB_eqtl_2 <- read.table("/mnt/belinda_70t/ruth_data/QTLs/celltype-eqtl-sumstats.Exc.SPTSSB_locus_genes.tsv", header = T) # ROSMAP snRNA-seq for excitatory neurons
  198. # For single-cell eQTLs
  199. SPTSSB_eqtl_2 <- SPTSSB_eqtl_2[,c(3:12)]
  200. colnames(SPTSSB_eqtl_2) <- c("gene","rsid","CHR","pos.hg38","Allele2","Allele1","Freq1","Effect","StdErr","P.value")
  201. SPTSSB_eqtl_1 <- read.table("/mnt/belinda_local/ruth/data/omics_integration/colocalization_analysis/Surendran_mGWAS_SPTSSB_data/sptssb_heptanoate_500kb+-coordinates_hg38_conversion_w_rsids.txt", sep = '\t', header = T, stringsAsFactors = TRUE)[,c(2,4)]
  202. colnames(SPTSSB_eqtl_1)[1] <- "Pos"
  203. SPTSSB_eqtl_2 <- merge(SPTSSB_eqtl_1, SPTSSB_eqtl_2, by="pos.hg38")
  204. colnames(SPTSSB_eqtl_2)[2] <- "Pos"
  205. # For mQTLs other than heptanoate - rescue rsids
  206. rsids <- read.table("/mnt/belinda_local/ruth/data/omics_integration/colocalization_analysis/Surendran_mGWAS_SPTSSB_data/SPTSSB_PD_GWAS_var_+-_500kb_heptanoate_only.txt", sep = '\t', header = T, stringsAsFactors = TRUE)[,c("Pos","rsid")]
  207. SPTSSB_eqtl_2 <- merge(rsids, SPTSSB_eqtl_2, by="Pos")
  208. SPTSSB_eqtl_2$Allele1 <- toupper(SPTSSB_eqtl_2$Allele1)
  209. SPTSSB_eqtl_2$Allele2 <- toupper(SPTSSB_eqtl_2$Allele2)
  210. SPTSSB_eqtl <- SPTSSB_eqtl_2
  211. # Only for mQTLs
  212. SPTSSB_eqtl$gene <- "ENSG00000196542" # SPTSSB
  213. SPTSSB_eqtl$FDR <- p.adjust(SPTSSB_eqtl$P.value, method = "BH")
  214. SPTSSB_eqtl$t_stat <- SPTSSB_eqtl$Effect / SPTSSB_eqtl$StdErr
  215. SPTSSB_eqtl <- SPTSSB_eqtl[,c("rsid","gene","Effect","t_stat","P.value","FDR")]
  216. colnames(SPTSSB_eqtl) <- c("SNP","gene","beta","t.stat","p.value","FDR")
  217. # Remove columns with either empty or duplicated rsids
  218. SPTSSB_eqtl <- SPTSSB_eqtl[!(SPTSSB_eqtl$SNP %in% ""),]
  219. SPTSSB_eqtl <- SPTSSB_eqtl[!(SPTSSB_eqtl$SNP %in% SPTSSB_eqtl$SNP[duplicated(SPTSSB_eqtl$SNP)]), ] # if there are no duplicated values, result will be empty
  220. # For Surendran mQTLs only - Need to flip beta signal (because they flipped effect and reference alleles)
  221. SPTSSB_eqtl$beta <- -(SPTSSB_eqtl$beta)
  222. write.table(SPTSSB_eqtl, "heptanoate_SPTSSB_for_SMR_flipped.txt", row.names=F, col.names=T, quote=F, sep="\t")
  223. # For single-cell eQTLs only - Need to save eQTLs per gene
  224. temp <- SPTSSB_eqtl[SPTSSB_eqtl$gene %in% "ENSG00000196542",]
  225. write.table(temp, "excitatory_neurons_SPTSSB_for_SMR.txt", row.names=F, col.names=T, quote=F, sep="\t")
  226. ##### Creating .besd files (only necessary for Surendran mQTLs/single-cell eQTLs) ----
  227. # Instructions: https://yanglab.westlake.edu.cn/software/smr/#DataManagement
  228. ## Make a BESD file from Matrix QTL output
  229. # First, ----for mQTLs----, we need to properly name the genes where the SNVs fall onto
  230. # gene_rescue <- unique(read.table("VEP_SPTSSB_locus_SNV-gene_rescue_Surendran.txt")[,c(1,6:7)])
  231. # gene_rescue <- gene_rescue[grep("^ENSG", gene_rescue$V7), ] # only over half of SNPs get rescued...
  232. PPM1L_coord <- c(160473995, 160788817) # start, end
  233. B3GALNT1_coord <- c(160801670, 160823160)
  234. NMD3_coord <- c(160939098, 160969795)
  235. SPTSSB_coord <- c(161062579, 161089871)
  236. OTOL1_coord <- c(161214595, 161221730)
  237. # Gene names and coordinates as a list
  238. genes <- list(
  239. PPM1L = list(coord = PPM1L_coord, gene_id = "ENSG00000163590"),
  240. B3GALNT1 = list(coord = B3GALNT1_coord, gene_id = "ENSG00000169255"),
  241. NMD3 = list(coord = NMD3_coord, gene_id = "ENSG00000169251"),
  242. SPTSSB = list(coord = SPTSSB_coord, gene_id = "ENSG00000196542"),
  243. OTOL1 = list(coord = OTOL1_coord, gene_id = "ENSG00000182447")
  244. )
  245. # Load mQTL data
  246. mQTL <- read.table("heptanoate_SPTSSB_for_SMR_flipped.txt", header = TRUE)
  247. mQTL$gene <- NA # Initialize gene column
  248. # Assign genes to SNPs
  249. for (i in 1:nrow(mQTL)) {
  250. rsid <- mQTL[i, "SNP"]
  251. pos <- SPTSSB_eqtl_2[SPTSSB_eqtl_2$rsid %in% rsid,]$Pos
  252. # Calculate distances to all genes
  253. distances <- sapply(genes, function(gene) {
  254. if (pos >= gene$coord[1] && pos <= gene$coord[2]) {
  255. return(0) # SNP falls within the gene
  256. } else if (pos < gene$coord[1]) {
  257. return(gene$coord[1] - pos) # Distance to gene start
  258. } else {
  259. return(pos - gene$coord[2]) # Distance to gene end
  260. }
  261. })
  262. # Assign the nearest gene
  263. nearest_gene <- names(distances)[which.min(distances)]
  264. mQTL[i, "gene"] <- genes[[nearest_gene]]$gene_id
  265. }
  266. write.table(mQTL, "heptanoate_SPTSSB_for_SMR_flipped.txt", row.names = F, col.names = T, sep="\t", quote = F)
  267. # Create BESD itself
  268. cmd <- paste0(smr_path, " --eqtl-summary heptanoate_SPTSSB_for_SMR_flipped.txt --matrix-eqtl-format --make-besd --out heptanoate_SPTSSB_for_SMR_flipped ")
  269. # cmd <- paste0(smr_path, " --eqtl-summary excitatory_neurons_SPTSSB_for_SMR.txt --matrix-eqtl-format --make-besd --out excitatory_neurons_SPTSSB_for_SMR ")
  270. cmd
  271. system(cmd)
  272. # After make BESD file command, I realized the.esi and .epi files were not properly formatted.
  273. # Need to re-format it, so it looks like this:
  274. # # .esi:
  275. # chromosome SNP genetic_distance(can be 0) position effect_allele other_allele freq
  276. # 1 rs1001 0 744055 A G 0.23
  277. # 1 rs1002 0 765522 C G 0.06
  278. # 1 rs1003 0 995669 T C 0.11
  279. # ......
  280. # # .epi (only used for graphs):
  281. # chromosome probeID(exon or transc) genetic_distance(can be 0) physical_position geneID gene_strand
  282. # 1 probe1001 0 924243 Gene01 +
  283. # 1 probe1002 0 939564 Gene02 -
  284. # 1 probe1003 0 1130681 Gene03 -
  285. # ......
  286. # Gene range list: https://www.cog-genomics.org/static/bin/plink/glist-hg38
  287. esi_file <- read.table("heptanoate_SPTSSB_for_SMR_flipped.esi")
  288. positions <- SPTSSB_eqtl_2[,c("rsid","Pos","Allele1","Allele2","Freq1")]
  289. # positions <- positions[!(positions$rsid %in% ""),]
  290. positions <- positions[!(positions$rsid %in% positions$rsid[duplicated(positions$rsid)]), ]
  291. positions <- unique(positions)
  292. esi_file$V1 <- 3
  293. esi_file$V4 <- positions$Pos
  294. # When alleles are NOT flipped
  295. esi_file$V5 <- positions$Allele1
  296. esi_file$V6 <- positions$Allele2
  297. esi_file$V7 <- positions$Freq1
  298. # When alleles are flipped
  299. esi_file$V5 <- positions$Allele2
  300. esi_file$V6 <- positions$Allele1
  301. esi_file$V7 <- 1-positions$Freq1
  302. write.table(esi_file, "heptanoate_SPTSSB_for_SMR_flipped.esi", row.names = F, col.names = F, sep = "\t", quote = F)
  303. # Rescue info for genes of interest
  304. epi_file <- read.table("heptanoate_SPTSSB_for_SMR_flipped.epi")
  305. # Rescue only for the genes with eQTL within the .besd file
  306. epi_file[1,] <- c(3, "ENSG00000163590", 0, 160631406, "PPM1L", "+") # coordinate in the middle of the gene
  307. epi_file[2,] <- c(3, "ENSG00000169255", 0, 160812415, "B3GALNT1", "-")
  308. epi_file[3,] <- c(3, "ENSG00000169251", 0, 160954447, "NMD3", "+")
  309. epi_file[4,] <- c(3, "ENSG00000196542", 0, 161076225, "SPTSSB", "-")
  310. epi_file[5,] <- c(3, "ENSG00000182447", 0, 161218162, "OTOL1", "+")
  311. write.table(epi_file, "heptanoate_SPTSSB_for_SMR_flipped.epi", row.names = F, col.names = F, sep = "\t", quote = F)
  312. #### Running MR itself (SMR and HEIDI test) ----
  313. # Instructions: https://yanglab.westlake.edu.cn/software/smr/#SMR&HEIDIanalysis
  314. binaries_path <- "/mnt/belinda_local/ruth/home/plink_binaries/g1000_eur_hg19"
  315. # gwas_path <- "./gwas_SPTSSB_for_SMR_hg19.ma"
  316. gwas_path <- "./gwas_SPTSSB_for_SMR_hg19_case-control.ma"
  317. heptanoate_path <- "./heptanoate_SPTSSB_for_SMR_flipped"
  318. # oleate_path <- "./oleate-vaccenate_SPTSSB_for_SMR"
  319. nerve_path <- "/mnt/belinda_70t/ruth_data/QTLs/for_GTEx_coloc_graphs/Nerve_Tibial/Nerve_Tibial"
  320. hypothalamus_path <- "/mnt/belinda_70t/ruth_data/QTLs/for_GTEx_coloc_graphs/Brain_Hypothalamus/Brain_Hypothalamus"
  321. cortex_path <- "/mnt/belinda_70t/ruth_data/QTLs/for_SMR_coloc_graphs/BrainMeta_cis_eqtl_summary/BrainMeta_cis_eQTL_chr3"
  322. blood_path <- "/mnt/belinda_70t/ruth_data/QTLs/for_GTEx_coloc_graphs/Whole_Blood/Whole_Blood"
  323. # excitatory_path <- "./excitatory_neurons_SPTSSB_for_SMR_all_genes"
  324. excitatory_path <- "./excitatory_neurons_SPTSSB_for_SMR"
  325. # Multi-SNP-based SMR test
  326. # Below shows an option to combine the information from all the SNPs in a region that pass a p-value threshold
  327. # (the default value is 5.0e-8 which can be modified by the flag --peqtl-smr)
  328. # Note that SMR always considers GWAS phenotype as outcome, so it is unclear whether it can test reverse causation...
  329. # But for the version with 2 molecular traits, it is indeed possible to test reverse causation by flipping the order the exposure and outcome
  330. # summary stats are presented in the command line.
  331. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", heptanoate_path, " --gwas-summary ", gwas_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_PD_GWAS_plasma_heptanoate_FLIPPED_mQTLs_multiSNP_0.05_case-control ")
  332. # cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", oleate_path, " --gwas-summary ", gwas_path, " oleate-vaccenate_SPTSSB_for_SMR --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_PD_GWAS_plasma_oleate-vaccenate_mQTLs_multiSNP_0.05 ")
  333. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", nerve_path, " --gwas-summary ", gwas_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_PD_GWAS_nerve_tibial_SPTSSB_eQTLs_multiSNP_0.05 ") # genome build needs to match!
  334. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", hypothalamus_path, " --gwas-summary ", gwas_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_PD_GWAS_hypothalamus_SPTSSB_eQTLs_multiSNP_0.05 ") # genome build needs to match!
  335. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", cortex_path, " --gwas-summary ", gwas_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_PD_GWAS_cortex_SPTSSB_eQTLs_multiSNP_0.05_case-control ") # genome build needs to match!
  336. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", blood_path, " --gwas-summary ", gwas_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_PD_GWAS_blood_SPTSSB_eQTLs_multiSNP_0.05 ") # genome build needs to match!
  337. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", excitatory_path, " --gwas-summary ", gwas_path, " excitatory_neurons_SPTSSB_for_SMR_all_genes --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_PD_GWAS_excitatory_neurons_SPTSSB_all_genes_eQTLs_multiSNP_0.05_case-control ")
  338. cmd
  339. system(cmd)
  340. # --bfile (plink binaries) can be replaced by --bld, which reads LD information from a binary file in BLD format
  341. # You may add "--maf 0.01" to filter SNPs by MAF (in the reference sample) - OPTIONAL
  342. # You may run with multiple threads: "--thread-num 10" - OPTIONAL
  343. # SMR analysis of two molecular traits
  344. # Here we provide an option to test the pleiotropic association between two molecular traits using summary data.
  345. # Exposure should come first, outcome should come second
  346. # eQTL -> mQTL
  347. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", nerve_path, " --beqtl-summary ", heptanoate_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_nerve_to_heptanoate_multiSNP_0.05")
  348. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", hypothalamus_path, " --beqtl-summary ", heptanoate_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_hypothalamus_to_heptanoate_multiSNP_0.05")
  349. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", cortex_path, " --beqtl-summary ", heptanoate_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_cortex_to_heptanoate_multiSNP_0.05")
  350. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", blood_path, " --beqtl-summary ", heptanoate_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_blood_to_heptanoate_multiSNP_0.05")
  351. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", excitatory_path, " --beqtl-summary ", heptanoate_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_excitatory_to_heptanoate_multiSNP_0.05_SPTSSB_only")
  352. # cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", nerve_path, " --beqtl-summary ", oleate_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_nerve_to_oleate-vaccenate_multiSNP_0.05")
  353. # cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", hypothalamus_path, " --beqtl-summary ", oleate_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_hypothalamus_to_oleate-vaccenate_multiSNP_0.05")
  354. # cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", cortex_path, " --beqtl-summary ", oleate_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_cortex_to_oleate-vaccenate_multiSNP_0.05")
  355. # cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", blood_path, " --beqtl-summary ", oleate_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_blood_to_oleate-vaccenate_multiSNP_0.05")
  356. cmd
  357. system(cmd)
  358. # mQTL -> eQTL (reverse causation)
  359. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", heptanoate_path, " --beqtl-summary ", nerve_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_heptanoate_to_nerve_multiSNP_0.05")
  360. # cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", oleate_path, " --beqtl-summary ", nerve_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_oleate_to_nerve_multiSNP_0.05")
  361. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", heptanoate_path, " --beqtl-summary ", hypothalamus_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_heptanoate_to_hypothalamus_multiSNP_0.05")
  362. # cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", oleate_path, " --beqtl-summary ", hypothalamus_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_oleate_to_hypothalamus_multiSNP_0.05")
  363. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", heptanoate_path, " --beqtl-summary ", cortex_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_heptanoate_to_cortex_multiSNP_0.05")
  364. # cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", oleate_path, " --beqtl-summary ", cortex_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_oleate_to_cortex_multiSNP_0.05")
  365. cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", heptanoate_path, " --beqtl-summary ", blood_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_heptanoate_to_blood_multiSNP_0.05")
  366. # cmd <- paste0(smr_path, " --bfile ", binaries_path, " --beqtl-summary ", oleate_path, " --beqtl-summary ", blood_path, " --peqtl-smr 0.05 --peqtl-heidi 0.05 --smr-multi --out smr_oleate_to_blood_multiSNP_0.05")
  367. cmd
  368. system(cmd)
  369. # Data visualization tool: https://yanglab.westlake.edu.cn/smr-portal/viewer
  370. # Formatting files for plotting: https://yanglab.westlake.edu.cn/software/smr/#SMRlocusplot19

co-localization_and_MR_clean.R at commit 6dc5d54, no license · at the source

Overview

Authors: Ruth B De-Paula1, Jonggeol Kim2, Herve Rhinn3, Hiba Saade2, Fatima Chavez2, Téah Segura2, Maria Valeria Lozano2, Michelle Etoundi2, Karla Silos2, Naomi Kass2, Viktoriya Korchina4, Harshavardhan Doddapaneni4, Eric Venner4, Joseph C Masdeu5, Valory Pavlik2, Melissa M Yu2, Chi-Ying R Lin2, Joseph Jankovic2, Aron S Buchman6,7, Donna Muzny4
and 7 other authorsRichard A Gibbs4,8, Sarah H Elsea4,8, Asa Abeliovich3, Peter Lansbury9, Nora Vanegas-Arroyave2,10, Chad A Shaw8,10,11, Joshua M Shulman2,8,10,11,12
  1. Quantitative and Computational Biosciences Program, Baylor College of Medicine, Houston, TX 77030, USA
  2. Department of Neurology, Baylor College of Medicine, Houston, TX 77030, USA
  3. Leal Therapeutics, Worcester, MA 01605, USA
  4. Human Genome Sequencing Center, Baylor College of Medicine, Houston, TX 77030, USA
  5. Nantz National Alzheimer Center, Houston Methodist Neurological Institute and Weill Cornell Medicine, Houston, TX 77030, USA
  6. Rush Alzheimer's Disease Center, Rush University Medical Center, Chicago, IL 60612, USA
  7. Department of Neurological Sciences, Rush University Medical Center, Chicago, IL 60612, USA
  8. Department of Molecular and Human Genetics, Baylor College of Medicine, Houston, TX 77030, USA
  9. Department of Neurology, Harvard Medical School, Boston, MA 02115, USA
  10. Center for Alzheimer’s and Neurodegenerative Diseases, Baylor College of Medicine, Houston, TX 77030, USA
  11. Jan and Dan Duncan Neurological Research Institute, Texas Children’s Hospital, Houston, TX 77030, USA
  12. Department of Neuroscience, Baylor College of Medicine, Houston, TX 77030, USA
Institutions: Baylor College of Medicine (United States); Houston Methodist (United States); Weill Cornell Medicine (United States); Rush University Medical Center (United States); Harvard University (United States); Texas Children's Hospital (United States)
Journal: Brain : a journal of neurology, volume 149, issue 9, pages 3119-3133
Dates: received 14 July 2025; accepted 2 January 2026; published online 2 February 2026; in print September 2026
Type: Research article · Language: English
License: CC BY-NC
Identifiers: DOI 10.1093/brain/awag039 · PMID 41627849 · PMCID PMC13548858 · OpenAlex W7127092895
Open access: hybrid, a free copy (OpenAlex)
Status: code verified
Categories: genetics / omics (modality), human (organism), Alzheimer's / dementia (population), Parkinson's (population), clinical / translational (subfield)
Methods: Statistics, Preprocessing
Keywords: SPTSSB, GBA1, sphingolipids, acylcarnitine, fatty acid, Lewy body
MeSH: Genetic Predisposition to Disease*, Lipid Metabolism*, Parkinson Disease*, Serine C-Palmitoyltransferase*, Aged, Brain, Female, Genetic Variation, Humans, Male, Middle Aged, Quantitative Trait Loci, Sphingolipids (* major topic)
Topic: Sphingolipid Metabolism and Signaling (Molecular Biology, Biochemistry, Genetics and Molecular Biology), according to OpenAlex
Funding: Effie Marie Caine Endowed Chair for Alzheimer's Research; Jan and Dan Duncan Neurological Research Institute; McGee Family Foundation; Texas Children's Hospital; Houston Methodist Foundation; Silverstein Foundation; Huffington Foundation
Citations: cited by 4 papers (Europe PMC); 88 references in the paper

Abstract

The molecular pathways linking genetic variants to Parkinson’s disease (PD) onset and progression remain incompletely defined; however, risk alleles in multiple genes, including GBA1, strongly implicate lipid metabolism.

To systematically identify causal biomarker signatures, we analysed comprehensive metabolome profiles from blood plasma in 149 PD patients and 150 controls, along with complementary genetic, RNA-sequencing and metabolic data from other available clinical and pathologic cohorts. Using colocalization and summary-data-based Mendelian randomization, we tested whether expression and metabolic quantitative trait loci mediate the association between implicated genetic variants and PD risk. We further integrated differential metabolomics and proteomics from blood and brain to reveal pertinent mechanisms.

We show that common PD risk variants at the serine palmitoyltransferase small subunit B (SPTSSB) locus, a key regulator of de novo sphingolipid biosynthesis, are associated with increased SPTSSB brain expression and elevated plasma ceramides. Additional analyses strongly support our hypothesis that a common SPTSSB causal variant is responsible for PD risk as well as the expression and metabolic quantitative trait loci. Multiple sphingolipids and fatty acid derivatives were perturbed in PD, and we identified both unique and shared features with the Alzheimer’s disease metabolome. A PD acylcarnitine signature was further replicated in human post-mortem brain tissue, when comparing those with or without preclinical Lewy body pathology. Integrated analysis of complementary brain proteomic profiles revealed dysregulation of mitochondrial processes dependent on acylcarnitines, including fatty acid beta-oxidation, the tricarboxylic acid cycle and oxidative phosphorylation.

Our results identify promising biomarkers and reveal a causal chain linking genetic variation to altered gene/protein expression, lipid dysmetabolism, and the manifestation of PD.

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

Repository

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

ruthbpaula/PD_multiomics

License: none: the authors keep all their rights
State: the link answers, verified on 26 September 2026
Evidence: files inventoried
Commit: 6dc5d543f1b3b3c790224ad7b85a31c1d875e187, 3 February 2026
Languages: R (5)
Size: 7 files, 5 scripts
Software Heritage: not archived
Found in: “Data availability”
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: ggplot2 (5 files), data.table (3 files), tidyverse (3 files), ggpubr (2 files), car (1 file), circlize (1 file), ComplexHeatmap (1 file), limma (1 file), Plotly (1 file)
Availability: 1 check, the latest on 26 September 2026: the link answers
  • 26 September 2026: the link answers
6 files

The paper's code and data availability statement is in the Data section.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

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

ROSMAP data are available from the Synapse AD Knowledge Portal (https://adknowledgeportal.synapse.org), including bulk brain tissue metabolomics (syn26007830),29 bulk and single-cell RNA-seq (syn3505720,30 syn5336681834), proteomics (syn21449447, syn21448334)50 and whole genome sequencing (syn11707419).88 ROSMAP clinical, pathologic and demographic data were obtained from Synapse or requested directly from the Rush Alzheimer’s Disease Center. Data from the Surendran et al.44 metabolome-wide association analysis are available from (https://omicscience.org/apps/mgwas/mgwas.table.php); SPTSSB locus summary statistics were provided by Dr Claudia Langenberg (University of Cambridge). We also downloaded summary statistics from the Cadby et al.10 lipidome-wide association analysis. Summary statistics from all BCM-HM data genetic and metabolomic analyses are included with the Supplementary material. Due to privacy concerns and the possible inadvertent release of personal health information, individual-level BCM-HM genetic and metabolomic data are available on request from the corresponding author (JMS). Computational code and pipelines used for data analysis are available on GitHub (https://github.com/ruthbpaula/PD_multiomics/).

Reproduced under the paper's license (CC BY-NC), 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, 27 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 27 authors, 6 keywords, 13 MeSH terms, 7 funders, 83 references.

Cite

This paper

De-Paula, R. B., Kim, J., Rhinn, H., Saade, H., Chavez, F., Segura, T., Lozano, M. V., Etoundi, M., Silos, K., Kass, N., Korchina, V., Doddapaneni, H., Venner, E., Masdeu, J. C., Pavlik, V., Yu, M. M., Lin, C.-Y. R., Jankovic, J., Buchman, A. S., . . . Shulman, J. M. (2026). Mapping the causal chain from genetic risk variants to lipid dysmetabolism in Parkinson's disease. Brain : a journal of neurology, 149(9), 3119-3133. https://doi.org/10.1093/brain/awag039

BibTeX

@article{depaula2026mapping,
author = {De-Paula, Ruth B and Kim, Jonggeol and Rhinn, Herve and Saade, Hiba and Chavez, Fatima and Segura, Téah and Lozano, Maria Valeria and Etoundi, Michelle and Silos, Karla and Kass, Naomi and Korchina, Viktoriya and Doddapaneni, Harshavardhan and Venner, Eric and Masdeu, Joseph C and Pavlik, Valory and Yu, Melissa M and Lin, Chi-Ying R and Jankovic, Joseph and Buchman, Aron S and Muzny, Donna and Gibbs, Richard A and Elsea, Sarah H and Abeliovich, Asa and Lansbury, Peter and Vanegas-Arroyave, Nora and Shaw, Chad A and Shulman, Joshua M},
title = {{Mapping the causal chain from genetic risk variants to lipid dysmetabolism in Parkinson's disease}},
journal = {Brain : a journal of neurology},
year = {2026},
month = sep,
volume = {149},
number = {9},
pages = {3119--3133},
publisher = {Oxford University Press},
issn = {0006-8950},
doi = {10.1093/brain/awag039},
url = {https://doi.org/10.1093/brain/awag039},
pmid = {41627849},
pmcid = {PMC13548858}
}

RIS

TY - JOUR
AU - De-Paula, Ruth B
AU - Kim, Jonggeol
AU - Rhinn, Herve
AU - Saade, Hiba
AU - Chavez, Fatima
AU - Segura, Téah
AU - Lozano, Maria Valeria
AU - Etoundi, Michelle
AU - Silos, Karla
AU - Kass, Naomi
AU - Korchina, Viktoriya
AU - Doddapaneni, Harshavardhan
AU - Venner, Eric
AU - Masdeu, Joseph C
AU - Pavlik, Valory
AU - Yu, Melissa M
AU - Lin, Chi-Ying R
AU - Jankovic, Joseph
AU - Buchman, Aron S
AU - Muzny, Donna
AU - Gibbs, Richard A
AU - Elsea, Sarah H
AU - Abeliovich, Asa
AU - Lansbury, Peter
AU - Vanegas-Arroyave, Nora
AU - Shaw, Chad A
AU - Shulman, Joshua M
TI - Mapping the causal chain from genetic risk variants to lipid dysmetabolism in Parkinson's disease
T2 - Brain : a journal of neurology
J2 - Brain
PY - 2026
DA - 2026/09/01
VL - 149
IS - 9
SP - 3119
EP - 3133
SN - 0006-8950
PB - Oxford University Press
DO - 10.1093/brain/awag039
UR - https://doi.org/10.1093/brain/awag039
LA - en
ER -

CSL-JSON

{
"id": "10.1093/brain/awag039",
"type": "article-journal",
"title": "Mapping the causal chain from genetic risk variants to lipid dysmetabolism in Parkinson's disease",
"container-title": "Brain : a journal of neurology",
"author": [
{
"family": "De-Paula",
"given": "Ruth B"
},
{
"family": "Kim",
"given": "Jonggeol"
},
{
"family": "Rhinn",
"given": "Herve"
},
{
"family": "Saade",
"given": "Hiba"
},
{
"family": "Chavez",
"given": "Fatima"
},
{
"family": "Segura",
"given": "Téah"
},
{
"family": "Lozano",
"given": "Maria Valeria"
},
{
"family": "Etoundi",
"given": "Michelle"
},
{
"family": "Silos",
"given": "Karla"
},
{
"family": "Kass",
"given": "Naomi"
},
{
"family": "Korchina",
"given": "Viktoriya"
},
{
"family": "Doddapaneni",
"given": "Harshavardhan"
},
{
"family": "Venner",
"given": "Eric"
},
{
"family": "Masdeu",
"given": "Joseph C"
},
{
"family": "Pavlik",
"given": "Valory"
},
{
"family": "Yu",
"given": "Melissa M"
},
{
"family": "Lin",
"given": "Chi-Ying R"
},
{
"family": "Jankovic",
"given": "Joseph"
},
{
"family": "Buchman",
"given": "Aron S"
},
{
"family": "Muzny",
"given": "Donna"
},
{
"family": "Gibbs",
"given": "Richard A"
},
{
"family": "Elsea",
"given": "Sarah H"
},
{
"family": "Abeliovich",
"given": "Asa"
},
{
"family": "Lansbury",
"given": "Peter"
},
{
"family": "Vanegas-Arroyave",
"given": "Nora"
},
{
"family": "Shaw",
"given": "Chad A"
},
{
"family": "Shulman",
"given": "Joshua M"
}
],
"container-title-short": "Brain",
"volume": "149",
"issue": "9",
"page": "3119-3133",
"DOI": "10.1093/brain/awag039",
"PMID": "41627849",
"PMCID": "PMC13548858",
"ISSN": "0006-8950",
"publisher": "Oxford University Press",
"URL": "https://doi.org/10.1093/brain/awag039",
"language": "en",
"issued": {
"date-parts": [
[
2026,
9,
1
]
]
}
}

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.1016/j.celrep.2026.117235 [code]
Integration of aged brain multi-omics reveals cross-system mechanisms underlying Alzheimer's disease heterogeneity.
Journal: Cell reports
In common: circlize, ComplexHeatmap, ggpubr, 3 other tools, Alzheimer's / dementia, genetics / omics, 7 references
[2] 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 America
In common: limma, circlize, ComplexHeatmap, 5 other tools, genetics / omics, 3 references
[3] 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: limma, car, circlize, 6 other tools, genetics / omics, 1 reference
[4] doi:10.1186/s12967-026-08266-z [code]
Single-cell multi-omic integration analysis prioritizes druggable genes and reveals cell-type-specific causal effects in glioblastomagenesis.
Journal: Journal of translational medicine
In common: limma, circlize, ComplexHeatmap, 4 other tools, genetics / omics, 3 references
[5] doi:10.1016/j.xcrm.2026.102766 [code]
A longitudinal single-cell and spatial multiomic atlas of pediatric high-grade glioma.
Journal: Cell reports. Medicine
In common: limma, car, circlize, 6 other tools, genetics / omics
[6] doi:10.1038/s42003-026-10312-x [code]
Mapping the GDF15 arm of the integrated stress response in human cells and tissues.
Journal: Communications biology
In common: limma, circlize, ComplexHeatmap, 5 other tools, genetics / omics, 1 reference
[7] doi:10.1093/braincomms/fcag176 [code]
Tau topography subtypes account for clinical heterogeneity and longitudinal trajectories in early-onset Alzheimer's disease.
Journal: Brain communications
In common: car, Plotly, ggpubr, 2 other tools, Alzheimer's / dementia, clinical / translational, author Joseph C Masdeu
[8] doi:10.1038/s41514-026-00397-3 [code]
Nasal administration of Protollin enhances monocyte phagocytosis and decreases CD8&lt;sup&gt;+&lt;/sup&gt; T cell cytotoxicity in subjects with early Alzheimer's disease: a Phase 1 clinical trial.
Journal: npj aging
In common: limma, car, circlize, 5 other tools, Alzheimer's / dementia, clinical / translational
[9] 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: iScience
In common: limma, car, circlize, 5 other tools, clinical / translational
[10] doi:10.1101/gr.281113.125 [code]
Single-nucleus multiomic profiling of the aging mouse substantia nigra reveals conserved gene alterations linked to Parkinson's disease.
Journal: Genome research
In common: limma, circlize, ComplexHeatmap, 4 other tools, Parkinson's, genetics / omics, 1 reference

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

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.