Spatially Contextualized Integrative Genomics Highlights Neuronal and Glial Regulatory Programs in Low Back Pain.
The 20 matches · 6 of them tie a paragraph to a whole file, not to given lines: weak matches, whose lines are not tinted
- [1] § Materials and Methods › Spatial Genetic Mapping Using gsMap ↔ scripts/python/make_supp_table_s7_gsmap_cauchy.py, lines 17–43 · score 0.92 · CGND HRA, CGND HRC, E16.5_E1S1_MOSTA, GSM6919906_V160, GSM6919909_V225, adult human spinal
- [2] § Materials and Methods › Linkage Disequilibrium Score Regression ↔ scripts/R/make_supplementary_tables_S1_S6.R, lines 95–159 · score 0.91 · scale SNP heritability, attenuation ratio, LDSC intercept, polygenic signal, m13 lowbackpain, confounding
- [3] § Results › Genome-Wide Polygenic Signal and Convergent Gene Prioritization for Low Back Pain ↔ scripts/R/make_supplementary_tables_S1_S6.R, lines 95–159 · score 0.87 · chi square, lambda GC, attenuation ratio, polygenic signal, genome wide, S1
- [4] § Materials and Methods › Brain Cell-Type-Specific eQTL-Anchored Mendelian Randomization Analysis ↔ scripts/R/step8_run_mr_batch.R, lines 31–119 · score 0.82 · MR Egger regression, weighted median, Wald ratio, pleiotropy, clumping, exposures
- [5] § Materials and Methods › Spatial Genetic Mapping Using gsMap ↔ scripts/python/run_gsmap_step3_ldscore_human_5696.sh, the whole file · a weak match · score 0.81 · run_generate_ldscore, v46lift37, HapMap3 SNP, gsMap, GENCODE, human
- [6] § Materials and Methods › Spatial Genetic Mapping Using gsMap ↔ scripts/python/run_gsmap_step3_ldscore_human_5699.sh, the whole file · a weak match · score 0.81 · run_generate_ldscore, v46lift37, HapMap3 SNP, gsMap, GENCODE, human
- [7] § Results › Spatial Genetic Mapping Localizes LBP-Associated Signals to Neuroaxis-Related Embryonic Regions and Neuronal-Like Adult Spinal Niches ↔ scripts/python/make_supp_table_s7_gsmap_cauchy.py, lines 17–43 · score 0.80 · mitochondrial high secondary, hotspot cluster, adult human spinal, spinal cluster, S7, mouse
- [8] § Results › Spatial Genetic Mapping Localizes LBP-Associated Signals to Neuroaxis-Related Embryonic Regions and Neuronal-Like Adult Spinal Niches ↔ scripts/python/make_supp_table_s8_cluster_markers.py, the whole file · a weak match · score 0.79 · hotspot cluster, mitochondrial high secondary, spinal cluster, human spinal, S8, ranked
- [9] § Materials and Methods › Spatial Genetic Mapping Using gsMap ↔ scripts/python/make_supp_table_s8_cluster_markers.py, the whole file · a weak match · score 0.74 · spinal clusters, processed h5ad, human spinal, ranked, Enriched, biologically
- [10] § Materials and Methods › Brain Cell-Type-Specific eQTL Datasets and Exposure Preprocessing ↔ scripts/python/step5_prepare_eqtl_exposure_clean.py, lines 1–59 · score 0.71 · excitatory neurons, inhibitory neurons, endothelial cells, microglia, OPCs, pericytes
- [11] § Materials and Methods › Brain Cell-Type-Specific eQTL Datasets and Exposure Preprocessing ↔ scripts/python/step2_filter_eqtl_stream_8cells.py, the whole file · a weak match · score 0.69 · excitatory neurons, inhibitory neurons, endothelial cells, microglia, OPCs, pericytes
- [12] § Materials and Methods › GWAS Summary Statistics for Low Back Pain ↔ scripts/python/step1_standardize_finngen.py, lines 30–115 · score 0.67 · rsID ready, full variant, alt, pos, allele, FinnGen
- [13] § Materials and Methods › Bayesian Colocalization Analysis ↔ scripts/R/step12_run_coloc_batch.R, lines 16–97 · score 0.66 · pp h4, cc, quant, H0, coloc, beta
- [14] § Results › Brain Cell-Type-Specific eQTL-Anchored MR Highlights Neuronal and Glial Regulatory Associations with Low Back Pain ↔ scripts/python/step5_prepare_eqtl_exposure_clean.py, lines 1–59 · score 0.65 · excitatory neurons, inhibitory neurons, endothelial cells, microglia, OPCs, pericytes
- [15] § Results › Brain Cell-Type-Specific eQTL-Anchored MR Highlights Neuronal and Glial Regulatory Associations with Low Back Pain ↔ scripts/python/step10_extract_eqtl_for_coloc.py, the whole file · a weak match · score 0.64 · excitatory neurons, inhibitory neurons, endothelial cells, microglia, OPCs, pericytes
- [16] § Results › Genome-Wide Polygenic Signal and Convergent Gene Prioritization for Low Back Pain ↔ scripts/R/plot_helpers_lbp.R, lines 109–126 · score 0.63 · chi square, lambda GC, metrics, intercept, ratio, SE
- [17] § Materials and Methods › GWAS Summary Statistics for Low Back Pain ↔ scripts/python/step3_prepare_lbp_ldsc_magma.py, lines 1–64 · score 0.62 · rsID ready, m13 lowbackpain, pos, chr, FinnGen, LDSC
- [18] § Materials and Methods › Gene-Level Prioritization Using MAGMA and PoPS ↔ scripts/R/make_supplementary_tables_S1_S6.R, lines 203–272 · score 0.61 · feature selection, PoPS, covariates, training, score, gene
- [19] § Results › Genome-Wide Polygenic Signal and Convergent Gene Prioritization for Low Back Pain ↔ scripts/R/plot_helpers_lbp.R, lines 109–126 · score 0.55 · chi square, lambda GC, metrics, intercept, ratio, LDSC
- [20] § Results › Genome-Wide Polygenic Signal and Convergent Gene Prioritization for Low Back Pain ↔ scripts/R/plot_figure2_ldsc_magma_pops.R, lines 45–125 · score 0.50 · MAGMA PoPS, MAGMA gene, overlap, scores, Figure 2, LBP
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 · 404 lines · 12 KB · no license · 3 matches
- suppressPackageStartupMessages({
- library(data.table)
- library(dplyr)
- library(stringr)
- })
- # =========================
- # 0. CONFIG
- # =========================
- project_root <- "/home/asset/CLBP_brain_eQTL"
- # input files
- baseline_log <- file.path(project_root, "04_results/01_ldsc/M13_LOWBACKPAIN_baselineLD.log")
- hm3_log <- file.path(project_root, "04_results/01_ldsc/M13_LOWBACKPAIN.hm3.log")
- magma_file <- file.path(project_root, "04_results/02_magma/M13_LOWBACKPAIN_ENSG.genes.out")
- pops_file <- file.path(project_root, "04_results/03_pops/M13_LOWBACKPAIN_ENSG.preds")
- mr_file <- file.path(project_root, "04_results/04_mr/03_mr_results/MR_results_all.tsv")
- coloc_file <- file.path(project_root, "04_results/04_mr/04_coloc/coloc_results_nonMHC.tsv")
- integrated_file <- file.path(project_root, "04_results/05_integrated_tables/LBP_integrated_candidate_table.tsv")
- map_file <- file.path(project_root, "03_scripts_R/ensg_to_symbol_mapping.txt")
- # output
- out_dir <- file.path(project_root, "04_results/07_supplementary_tables")
- dir.create(out_dir, recursive = TRUE, showWarnings = FALSE)
- # =========================
- # 1. HELPERS
- # =========================
- stopifnot(file.exists(baseline_log))
- stopifnot(file.exists(hm3_log))
- stopifnot(file.exists(magma_file))
- stopifnot(file.exists(pops_file))
- stopifnot(file.exists(mr_file))
- stopifnot(file.exists(coloc_file))
- stopifnot(file.exists(map_file))
- read_symbol_map <- function(path) {
- dt <- fread(path, sep = "\t", header = FALSE, fill = TRUE, quote = "", data.table = FALSE)
- if (ncol(dt) < 2) stop("Mapping file must have at least 2 columns.")
- ensg <- sub("\\..*$", "", as.character(dt[[1]]))
- raw2 <- as.character(dt[[2]])
- sym <- raw2
- has_gene_name <- grepl('gene_name "', raw2)
- sym[has_gene_name] <- sub('.*gene_name "([^"]+)".*', '\\1', raw2[has_gene_name])
- sym[!has_gene_name] <- sub('^"?([^";]+).*', '\\1', raw2[!has_gene_name])
- sym <- gsub('"', "", sym)
- sym <- trimws(sym)
- sym <- sub(";.*$", "", sym)
- out <- data.frame(
- ENSGID = ensg,
- gene_symbol = sym,
- stringsAsFactors = FALSE
- )
- out %>%
- filter(!is.na(ENSGID), ENSGID != "", !is.na(gene_symbol), gene_symbol != "") %>%
- distinct(ENSGID, .keep_all = TRUE)
- }
- extract_main_se <- function(lines, pattern) {
- x <- grep(pattern, lines, value = TRUE)
- if (length(x) == 0) return(c(value = NA_real_, se = NA_real_))
- m <- str_match(x[1], "([-0-9.eE]+) \\(([-0-9.eE]+)\\)")
- c(value = as.numeric(m[,2]), se = as.numeric(m[,3]))
- }
- extract_eq_value <- function(lines, pattern) {
- x <- grep(pattern, lines, value = TRUE)
- if (length(x) == 0) return(NA_real_)
- m <- str_match(x[1], "=\\s*([-0-9.eE]+)")
- if (!is.na(m[,2])) return(as.numeric(m[,2]))
- m2 <- str_match(x[1], "([-0-9.eE]+)\\s*$")
- as.numeric(m2[,2])
- }
- extract_integer_from_line <- function(lines, pattern) {
- x <- grep(pattern, lines, value = TRUE)
- if (length(x) == 0) return(NA_integer_)
- m <- str_match(x[1], "([0-9,]+)")
- as.integer(gsub(",", "", m[,2]))
- }
- is_mhc_gene <- function(gene_symbol) {
- grepl("^HLA-|^BTNL2$|^ZSCAN31$|^MICB$|^TRIM40$|^HCG27$|^MUC21$|^MUC22$|^MUC20$|^C4A$|^C4B$", gene_symbol)
- }
- yes_no <- function(x) ifelse(isTRUE(x), "Yes", "No")
- # =========================
- # 2. S1 LDSC SUMMARY
- # =========================
- base_lines <- readLines(baseline_log, warn = FALSE)
- hm3_lines <- readLines(hm3_log, warn = FALSE)
- obs_res <- extract_main_se(base_lines, "Total Observed scale h2")
- int_res <- extract_main_se(base_lines, "^Intercept:")
- rat_res <- extract_main_se(base_lines, "^Ratio")
- lambda_gc <- extract_eq_value(hm3_lines, "Lambda GC")
- mean_chi2 <- extract_eq_value(hm3_lines, "Mean chi\\^2|Mean Chi\\^2")
- max_chi2 <- extract_eq_value(hm3_lines, "Max chi\\^2|Max Chi\\^2")
- gws_snps <- extract_integer_from_line(hm3_lines, "Genome-wide significant SNPs")
- snp_written <- extract_integer_from_line(hm3_lines, "Writing summary statistics for")
- S1 <- data.frame(
- Metric = c(
- "Observed-scale SNP heritability",
- "LDSC intercept",
- "Attenuation ratio",
- "Lambda GC",
- "Mean chi-square",
- "Max chi-square",
- "Genome-wide significant SNPs",
- "SNPs retained in munged summary statistics"
- ),
- Value = c(
- obs_res["value"],
- int_res["value"],
- rat_res["value"],
- lambda_gc,
- mean_chi2,
- max_chi2,
- gws_snps,
- snp_written
- ),
- SE = c(
- obs_res["se"],
- int_res["se"],
- rat_res["se"],
- NA, NA, NA, NA, NA
- ),
- Source_log = c(
- "M13_LOWBACKPAIN_baselineLD.log",
- "M13_LOWBACKPAIN_baselineLD.log",
- "M13_LOWBACKPAIN_baselineLD.log",
- "M13_LOWBACKPAIN.hm3.log",
- "M13_LOWBACKPAIN.hm3.log",
- "M13_LOWBACKPAIN.hm3.log",
- "M13_LOWBACKPAIN.hm3.log",
- "M13_LOWBACKPAIN.hm3.log"
- ),
- Notes = c(
- "Main observed-scale heritability estimate",
- "Confounding assessment",
- "Proportion of inflation attributable to confounding",
- "Genomic inflation factor",
- "Overall polygenic signal strength",
- "Maximum chi-square statistic",
- "Reported by LDSC after munging",
- "Written to munged summary statistics output"
- ),
- stringsAsFactors = FALSE
- )
- # =========================
- # 3. S2 MAGMA FULL RESULTS
- # =========================
- map_dt <- read_symbol_map(map_file)
- magma <- fread(magma_file) %>%
- rename(ENSGID = GENE,
- Chromosome = CHR,
- Start = START,
- Stop = STOP,
- No_of_SNPs = NSNPS,
- NPARAM = NPARAM,
- Sample_size = N,
- Z_statistic = ZSTAT,
- P_value = P) %>%
- mutate(ENSGID = sub("\\..*$", "", ENSGID)) %>%
- left_join(map_dt, by = "ENSGID") %>%
- mutate(
- gene_symbol = ifelse(is.na(gene_symbol) | gene_symbol == "", ENSGID, gene_symbol)
- ) %>%
- arrange(P_value) %>%
- mutate(
- Rank = row_number(),
- Bonferroni_significant = ifelse(P_value < 0.05 / n(), "Yes", "No")
- ) %>%
- select(
- ENSGID,
- gene_symbol,
- Chromosome,
- Start,
- Stop,
- No_of_SNPs,
- NPARAM,
- Sample_size,
- Z_statistic,
- P_value,
- Rank,
- Bonferroni_significant
- )
- S2 <- as.data.frame(magma)
- # =========================
- # 4. S3 PoPS FULL RESULTS
- # =========================
- pops <- fread(pops_file) %>%
- mutate(ENSGID = sub("\\..*$", "", ENSGID)) %>%
- left_join(map_dt, by = "ENSGID") %>%
- mutate(
- gene_symbol = ifelse(is.na(gene_symbol) | gene_symbol == "", ENSGID, gene_symbol)
- ) %>%
- arrange(desc(PoPS_Score)) %>%
- mutate(Rank = row_number()) %>%
- select(
- ENSGID,
- gene_symbol,
- PoPS_Score,
- Y,
- Y_proj,
- project_out_covariates_gene,
- feature_selection_gene,
- training_gene,
- Rank
- )
- S3 <- as.data.frame(pops)
- # =========================
- # 5. S4 FULL MR RESULTS
- # =========================
- mr <- fread(mr_file)
- if (!"exposure" %in% names(mr)) stop("MR file must contain 'exposure' column.")
- S4 <- mr %>%
- mutate(
- gene_symbol = sub("^.*::", "", exposure),
- Cell_type = cell_type,
- Exposure_ID = exposure,
- MR_method = method,
- No_of_SNPs = nsnp,
- Beta = b,
- SE = se,
- P_value = pval,
- Global_FDR = pval_fdr_global,
- Direction = ifelse(Beta > 0, "Positive", "Negative"),
- MHC_region = ifelse(is_mhc_gene(gene_symbol), "Yes", "No"),
- Significant_after_global_FDR = ifelse(Global_FDR < 0.05, "Yes", "No")
- ) %>%
- arrange(Global_FDR, P_value) %>%
- select(
- Cell_type,
- gene_symbol,
- Exposure_ID,
- MR_method,
- No_of_SNPs,
- Beta,
- SE,
- P_value,
- Global_FDR,
- Direction,
- MHC_region,
- Significant_after_global_FDR
- ) %>%
- as.data.frame()
- names(S4)[2] <- "Gene_symbol"
- # =========================
- # 6. S5 FULL COLOC RESULTS
- # =========================
- coloc <- fread(coloc_file)
- # robust rename
- rename_if_exists <- function(dt, from, to) {
- if (from %in% names(dt)) setnames(dt, from, to)
- dt
- }
- coloc <- as.data.table(coloc)
- coloc <- rename_if_exists(coloc, "gene", "Gene_symbol")
- coloc <- rename_if_exists(coloc, "cell_type", "Cell_type")
- coloc <- rename_if_exists(coloc, "nsnps", "No_of_shared_SNPs")
- coloc <- rename_if_exists(coloc, "PP.H0.abf", "PP.H0")
- coloc <- rename_if_exists(coloc, "PP.H1.abf", "PP.H1")
- coloc <- rename_if_exists(coloc, "PP.H2.abf", "PP.H2")
- coloc <- rename_if_exists(coloc, "PP.H3.abf", "PP.H3")
- coloc <- rename_if_exists(coloc, "PP.H4.abf", "PP.H4")
- required_cols_s5 <- c("Cell_type", "Gene_symbol", "PP.H3", "PP.H4")
- missing_s5 <- setdiff(required_cols_s5, names(coloc))
- if (length(missing_s5) > 0) stop(paste("Missing required coloc columns:", paste(missing_s5, collapse = ", ")))
- if (!"No_of_shared_SNPs" %in% names(coloc)) coloc$No_of_shared_SNPs <- NA
- S5 <- coloc %>%
- as.data.frame() %>%
- mutate(
- Colocalization_tier = case_when(
- PP.H4 >= 0.70 ~ "Core",
- PP.H4 >= 0.50 ~ "Supportive",
- TRUE ~ "Lower-priority"
- )
- ) %>%
- arrange(desc(PP.H4)) %>%
- select(
- Cell_type,
- Gene_symbol,
- No_of_shared_SNPs,
- dplyr::any_of(c("PP.H0", "PP.H1", "PP.H2")),
- PP.H3,
- PP.H4,
- Colocalization_tier
- )
- # =========================
- # 7. S6 FULL INTEGRATED MATRIX
- # =========================
- if (file.exists(integrated_file)) {
- S6 <- fread(integrated_file) %>% as.data.frame()
- } else {
- # rebuild if integrated file is absent
- magma_gene <- S2 %>%
- group_by(gene_symbol) %>%
- summarise(
- ENSGID = ENSGID[which.min(P_value)][1],
- MAGMA_P_value = min(P_value, na.rm = TRUE),
- MAGMA_Z_statistic = Z_statistic[which.min(P_value)][1],
- .groups = "drop"
- )
- pops_gene <- S3 %>%
- group_by(gene_symbol) %>%
- summarise(
- PoPS_score = max(PoPS_Score, na.rm = TRUE),
- .groups = "drop"
- )
- mr_sig_nonmhc <- S4 %>%
- filter(Significant_after_global_FDR == "Yes", MHC_region == "No") %>%
- mutate(
- Cell_type = Cell_type,
- Gene_symbol = Gene_symbol,
- MR_method = MR_method,
- MR_beta = Beta,
- MR_SE = SE,
- MR_P_value = P_value,
- MR_FDR = Global_FDR
- ) %>%
- select(Cell_type, Gene_symbol, MR_method, No_of_SNPs, MR_beta, MR_SE, MR_P_value, MR_FDR)
- S6 <- mr_sig_nonmhc %>%
- left_join(S5 %>% select(Cell_type, Gene_symbol, PP.H3, PP.H4, Colocalization_tier),
- by = c("Cell_type", "Gene_symbol")) %>%
- left_join(magma_gene, by = c("Gene_symbol" = "gene_symbol")) %>%
- left_join(pops_gene, by = c("Gene_symbol" = "gene_symbol")) %>%
- mutate(
- Priority_tier = case_when(
- !is.na(PP.H4) & PP.H4 >= 0.70 ~ "Core",
- !is.na(PP.H4) & PP.H4 >= 0.50 ~ "Supportive",
- TRUE ~ "Lower-priority"
- )
- ) %>%
- arrange(desc(PP.H4), MR_FDR, MR_P_value) %>%
- as.data.frame()
- }
- # standardize S6 columns if already exists
- if (nrow(S6) > 0) {
- nm <- names(S6)
- names(S6) <- gsub("^cell_type$", "Cell_type", nm)
- names(S6) <- gsub("^gene_symbol$", "Gene_symbol", names(S6))
- names(S6) <- gsub("^ENSGID$", "ENSGID", names(S6))
- names(S6) <- gsub("^method$", "MR_method", names(S6))
- names(S6) <- gsub("^nsnp$", "No_of_SNPs", names(S6))
- names(S6) <- gsub("^b$", "MR_beta", names(S6))
- names(S6) <- gsub("^se$", "MR_SE", names(S6))
- names(S6) <- gsub("^pval$", "MR_P_value", names(S6))
- names(S6) <- gsub("^pval_fdr_global$", "MR_FDR", names(S6))
- names(S6) <- gsub("^MAGMA_P$", "MAGMA_P_value", names(S6))
- names(S6) <- gsub("^MAGMA_Z$", "MAGMA_Z_statistic", names(S6))
- names(S6) <- gsub("^PoPS_Score$", "PoPS_score", names(S6))
- names(S6) <- gsub("^priority_group$", "Priority_tier", names(S6))
- }
- # =========================
- # 8. WRITE OUTPUTS
- # =========================
- write_table_pair <- function(df, stem) {
- fwrite(df, file.path(out_dir, paste0(stem, ".tsv")), sep = "\t", na = "NA")
- write.csv(df, file.path(out_dir, paste0(stem, ".csv")), row.names = FALSE, na = "")
- }
- write_table_pair(S1, "Supplementary_Table_S1")
- write_table_pair(S2, "Supplementary_Table_S2")
- write_table_pair(S3, "Supplementary_Table_S3")
- write_table_pair(S4, "Supplementary_Table_S4")
- write_table_pair(S5, "Supplementary_Table_S5")
- write_table_pair(S6, "Supplementary_Table_S6")
- cat("Done.\n")
- cat("Output directory:\n", out_dir, "\n")
- cat("Generated files:\n")
- print(list.files(out_dir, full.names = TRUE))
make_supplementary_tables_S1_S6.R at commit b66052f, no license · at the source
Overview
- Graduate School, Guangxi University of Chinese Medicine, Nanning, People’s Republic of China
- Department of Plastic Surgery, The Third People’s Hospital of Henan Province, Zhengzhou, People’s Republic of China
- Department of Rehabilitation Medicine, The First Affiliated Hospital of Guangxi University of Chinese Medicine, Nanning, People’s Republic of China
Abstract
Purpose: Low back pain (LBP) is a heterogeneous pain condition with a measurable genetic contribution, but the genes, brain cell types, and spatial tissue contexts through which inherited risk is expressed remain unclear. We aimed to define cell-type-specific and spatially contextualized genetic mechanisms underlying LBP.
Methods: FinnGen R12 LBP GWAS summary statistics (42,521 cases and 353,224 controls) were integrated with brain single-nuclei eQTL data across eight major brain cell classes. We evaluated genome-wide polygenic signal using LDSC, prioritized genes using MAGMA and PoPS, and performed brain cell-type-specific eQTL-anchored Mendelian randomization, primarily based on single-instrument Wald ratio estimates, followed by Bayesian colocalization. Spatial genetic mapping was conducted using gsMap in an E16.5 murine embryonic atlas and two adult human lumbar spinal cord Visium sections. Selected candidates were assessed by RT-qPCR in neuronal-like and astroglial-like inflammatory cell models.
Results: LDSC supported interpretable polygenic signal for LBP. MAGMA and PoPS showed partial gene-level convergence, with TCF4 and TMEFF2 supported by both approaches. Across 1641 tested gene-cell type exposures, significant eQTL-anchored MR associations were concentrated in excitatory neurons, oligodendrocytes, inhibitory neurons, and astrocytes. Integrated eQTL-anchored MR, colocalization, and gene-prioritization evidence highlighted CLEC18A, QPRT, and GMPPB as higher-priority non-MHC candidates with moderate, but not strong, colocalization support. gsMap localized LBP-associated enrichment to neuroaxis-related embryonic regions, including brain, spinal cord, sympathetic nerve, and dorsal root ganglion, and to neuronal-like niches in adult lumbar spinal cord. RT-qPCR showed model-dependent expression changes, with QPRT and LGI4 preferentially responsive in neuronal-like SH-SY5Y cells and GMPPB and DPYSL5 responsive in astroglial-like U251 cells.
Conclusion: These findings support neuronal and glial regulatory programs as plausible contributors to LBP genetic susceptibility and highlight CLEC18A, QPRT, and GMPPB as higher-priority non-MHC candidates with moderate colocalization support. The results provide a spatially contextualized framework for candidate prioritization in LBP, while emphasizing the need for larger cell-type-specific eQTL resources and functional validation before therapeutic or mechanistic conclusions can be drawn.
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 20 matches between paragraphs and lines of code.
zza070952-collab/LBP_brain_eQTL_spatial_genomics
b66052f2e2763db9c90e9c30137c3061f6385592, 23 June 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
36 files
- scripts/
R/ , R, 51 linesR.R - scripts/
R/ , R, 52 linescombine_main_figures.R - scripts/
R/ , R, 404 lines, 3 matchesmake_supplementary_table s_S1_S6.R - scripts/
R/ , R, 130 linesmake_table1_table2.R - scripts/
R/ , R, 125 lines, 1 matchplot_figure2_ldsc_magma_ pops.R - scripts/
R/ , R, 96 linesplot_figure3_mr.R - scripts/
R/ , R, 140 linesplot_figure4_coloc_integ ration.R - scripts/
R/ , R, 130 lines, 2 matchesplot_helpers_lbp.R - scripts/
R/ , R, 45 linesplot_theme_lbp.R - scripts/
R/ , R, 110 lines, 1 matchstep12_run_coloc_batch.R - scripts/
R/ , R, 154 lines, 1 matchstep8_run_mr_batch.R - scripts/
R/ , R, 21 linesstep9_make_coloc_shortli st.R - scripts/
python/ , Python, 9 linescheck_example_h5ad.py - scripts/
python/ , Python, 57 linesfix_pops_gene_annot.py - scripts/
python/ , Python, 82 lines, 2 matchesmake_supp_table_s7_gsmap _cauchy.py - scripts/
python/ , Python, 82 lines, 2 matchesmake_supp_table_s8_clust er_markers.py - scripts/
python/ , Python, 59 linesplot_figure5_mouse_embry o_gsmap.py - scripts/
python/ , Python, 90 linesplot_figure6_human_spina l_gsmap.py - scripts/
python/ , Python, 292 linesplot_figure7_main_qpcr.p y - scripts/
python/ , Shell, 19 linesrun_gsmap_step3_ldscore. sh - scripts/
python/ , Shell, 35 lines, 1 matchrun_gsmap_step3_ldscore_ human_5696.sh - scripts/
python/ , Shell, 35 lines, 1 matchrun_gsmap_step3_ldscore_ human_5699.sh - scripts/
python/ , Shell, 14 linesrun_magma_ensg.sh - scripts/
python/ , Shell, 11 linesrun_remaining_clumps.sh - scripts/
python/ , Shell, 11 linesrun_remaining_eqtl_filte rs.sh - scripts/
python/ , Python, 67 lines, 1 matchstep10_extract_eqtl_for_ coloc.py - scripts/
python/ , Python, 26 linesstep11_extract_outcome_f or_coloc.py - scripts/
python/ , Python, 115 lines, 1 matchstep1_standardize_finnge n.py - scripts/
python/ , Python, 76 linesstep2_filter_eqtl_onecel l.py - scripts/
python/ , Python, 58 linesstep2_filter_eqtl_stream .py - scripts/
python/ , Python, 79 lines, 1 matchstep2_filter_eqtl_stream _8cells.py - scripts/
python/ , Python, 129 lines, 1 matchstep3_prepare_lbp_ldsc_m agma.py - scripts/
python/ , Python, 134 lines, 2 matchesstep5_prepare_eqtl_expos ure_clean.py - scripts/
python/ , Python, 123 linesstep6_clump_eqtl_onecell .py - scripts/
python/ , Python, 51 linesstep7_extract_outcome_fo r_mr.py - README.md, Text, 31 lines
The paper's code and data availability statement is in the Data section.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 35 scripts, each with its path and the digest of its content;
- 20 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
- geo:GSM6919906, at NCBI GEO; found in “Data Sharing Statement”
Data Sharing Statement
The LBP GWAS summary statistics analyzed in this study were obtained from FinnGen release R12/
Custom scripts used for GWAS harmonization, LDSC and MAGMA input preparation, PoPS prioritization, brain cell-type-specific eQTL-anchored Mendelian randomization, Bayesian colocalization, gsMap post-processing, supplementary table generation, and figure generation are available at https://
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, pages, dates, 5 authors, 10 keywords, 24 references.
Cite
This paper
Tao, G., Wang, L., Du, H., Zeng, Z., & Lei, L. (2026). Spatially Contextualized Integrative Genomics Highlights Neuronal and Glial Regulatory Programs in Low Back Pain. Journal of pain research, 19, 619982. https://
BibTeX
@article{tao2026spatiall
author = {Tao, Guangyi and Wang, Linzi and Du, Hanzhe and Zeng, Zhonghe and Lei, Longming},
title = {{Spatially Contextualized Integrative Genomics Highlights Neuronal and Glial Regulatory Programs in Low Back Pain}},
journal = {Journal of pain research},
year = {2026},
month = aug,
volume = {19},
pages = {619982},
publisher = {Dove Press},
issn = {1178-7090},
doi = {10.2147/
url = {https://
pmid = {42699694},
pmcid = {PMC13544130}
}
RIS
TY - JOUR
AU - Tao, Guangyi
AU - Wang, Linzi
AU - Du, Hanzhe
AU - Zeng, Zhonghe
AU - Lei, Longming
TI - Spatially Contextualized Integrative Genomics Highlights Neuronal and Glial Regulatory Programs in Low Back Pain
T2 - Journal of pain research
J2 - J Pain Res
PY - 2026
DA - 2026/
VL - 19
SP - 619982
SN - 1178-7090
PB - Dove Press
DO - 10.2147/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.2147/
"type": "article-journal",
"title": "Spatially Contextualized Integrative Genomics Highlights Neuronal and Glial Regulatory Programs in Low Back Pain",
"container-title": "Journal of pain research",
"author": [
{
"family": "Tao",
"given": "Guangyi"
},
{
"family": "Wang",
"given": "Linzi"
},
{
"family": "Du",
"given": "Hanzhe"
},
{
"family": "Zeng",
"given": "Zhonghe"
},
{
"family": "Lei",
"given": "Longming"
}
],
"container-title-short":
"volume": "19",
"page": "619982",
"DOI": "10.2147/
"PMID": "42699694",
"PMCID": "PMC13544130",
"ISSN": "1178-7090",
"publisher": "Dove Press",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
8,
31
]
]
}
}
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 communicationsIn common: Scanpy, data.table, ggplot2, 4 other tools, genetics / omics, 5 references
- [2] doi:10.1073/pnas.2609814123 [code]
- Genetic architectures of brain-related traits are shaped by strong selective constraints.Journal: Proceedings of the National Academy of Sciences of the United States of AmericaIn common: data.table, patchwork, ggplot2, 5 other tools, genetics / omics, cellular / molecular, 3 references
- [3] doi:10.1038/s41467-026-71682-8 [code]
- GWAS meta-analysis of cerebrospinal fluid Alzheimer's biomarkers reveals loci regulating lipids, brain volume and autophagy.Journal: Nature communicationsIn common: data.table, ggplot2, tidyverse, 3 other tools, genetics / omics, 5 references
- [4] doi:10.1038/s41591-026-04492-6 [code]
- The genetic architecture of fibromyalgia across 2.5 million individuals.Journal: Nature medicineIn common: data.table, SciPy, Matplotlib, 1 other tool, pain, genetics / omics, 5 references
- [5] doi:10.1038/s41467-026-73007-1 [code]
- Single-nucleus epigenomic dysregulation unmasks genetic risk-associated neurodegenerative glia states.Journal: Nature communicationsIn common: Scanpy, data.table, patchwork, 5 other tools, genetics / omics, cellular / molecular, 2 references
- [6] doi:10.1038/s41380-026-03571-x [code]
- Convergent coexpression reveals shared biological mechanisms underlying common and rare variant risk in six neuropsychiatric disorders.Journal: Molecular psychiatryIn common: data.table, patchwork, ggplot2, 4 other tools, genetics / omics, cellular / molecular, 3 references
- [7] 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 behaviourIn common: data.table, ggplot2, tidyverse, 4 other tools, genetics / omics, 4 references
- [8] doi:10.1038/s41514-026-00391-9 [code]
- Region-specific transcriptional signatures of brain aging in the absence of neuropathology at the single-cell level.Journal: npj agingIn common: Scanpy, data.table, patchwork, 6 other tools, genetics / omics, cellular / molecular, 1 reference
- [9] doi:10.1038/s41467-026-73428-y [code]
- Regional heterogeneity in phenotypic and genetic associations between bone and brain in humans.Journal: Nature communicationsIn common: data.table, ggplot2, tidyverse, 3 other tools, genetics / omics, cellular / molecular, 4 references
- [10] doi:10.1016/j.stem.2026.05.005 [code]
- Generation of human appetite-regulating neurons and tanycytes from pluripotent stem cells.Journal: Cell stem cellIn common: Scanpy, data.table, patchwork, 6 other tools, cellular / molecular, 1 reference
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 35 scripts, and 20 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:8602ad555f7ea48f…
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.
