Genetic-enrichment methods

This page describes the analyses of the optional genetic-enrichment module. Genetic enrichment describes its release, method-selection and interpretation contracts, and its settings and defaults are listed in the parameter browser. The module does not check the species; the GRCh38 GWAS inputs assume a human aggregation.

Nucleus-level enrichment

Each multiomeR version uses one fixed Open Targets Platform release, currently 26.03, and downloads its study, credible-set, credible-set evidence and target datasets (Buniello et al. 2025). Users can supply their own fine-mapping results as Parquet files in a fixed format. For each configured GWAS, multiomeR retrieves the requested study and fine-mapping result. When selection is automatic, it takes the first available of SuSiE, SuSiE-inf and PICS fine-mapping (Wang et al. 2020; Cui et al. 2024; Farh et al. 2015). Variants of the study’s credible sets (95% sets for Open Targets) with a posterior probability above 0.001 by default are mapped to consensus ATAC peaks. Variant weights that map to the same peak are summed and capped at one. These peak weights form the trait annotation from which analytic nucleus-level chromVAR z-scores are calculated, reusing the GC-bias background of the motif analysis (Schep et al. 2017; Ulirsch et al. 2019; Germain 2026). The background variance of a weighted sum of peaks scales with the squared weights. betterChromVAR instead scales the variance of its analytic z-scores with the summed weights, so the z-scores are rescaled accordingly. To show which traits are not independent, credible sets are also compared pairwise. Posterior probabilities are summed per variant and normalized to one within each GWAS. The similarity of two GWAS is the sum, over identical variants, of the smaller of their two values. It equals one minus the total variation distance and is not a colocalization test.

Cell-type enrichment and locus attribution

Annotation-class pseudobulk deviations are calculated separately rather than by averaging the nucleus-level results. ATAC counts are summed by the final WNN cell-type labels, which the other analyses also use. Classes with fewer than 100 nuclei, such as isolated unassigned nuclei that a small minimum cluster size keeps, are left out of these and the S-LDSC analyses, because their profiles are too sparse and every class weighs equally in the background model. A betterChromVAR background model is fitted to the resulting peak-by-class matrix. The expected accessibility of each peak averages the depth-normalized class profiles with equal weight. Each class is thus compared with the average class rather than with a reference dominated by the most abundant classes. Background peaks are matched on this expectation and on GC content. The deviation is the accessibility of the weighted peaks minus that of the matched background peaks, relative to their expected accessibility. It thus corresponds to chromVAR’s bias-corrected deviation. Each trait’s deviations average about zero across classes. A class’s mean deviation over many traits therefore reflects the panel of traits rather than a property of the class. A relative deviation also standardizes the deviations across annotation classes within each trait. Significance is tested against a null that keeps the clustering of real GWAS loci, which often place several correlated peaks at one locus. Each trait’s credible sets are moved along their chromosomes 10,000 times and scored like the real ones. Credible sets whose lead variants lie within 500 kb of each other move together by 0.5 to 2 Mb, keeping their variant spacing and posterior probabilities. No moved credible set may land on an original one, in the extended MHC (chr6:25–34 Mb), in a peak-free stretch of at least 1 Mb such as a centromere, or off its chromosome. A block without such a move within 2 Mb moves elsewhere on its chromosome. Moved loci fall in fewer and less accessible peaks than real ones, so their raw deviations vary more. The real and moved loci are therefore compared by their background z-scores. This is the deviation’s numerator divided by its standard deviation under independently drawn matched background peaks, which scales with the squared peak weights. betterChromVAR 1.1.10 overestimates this background variance for deep counts such as pseudobulks, so it is recomputed from the counts. A class’s one-sided P-value is the share of moved copies, plus the real trait, whose background z-score is at least as large. The reported z-score standardizes the real background z-score by the mean and standard deviation of the moved copies. This null is skewed to the right, so normal P-values would be too small. Benjamini–Hochberg-adjusted P-values across all traits and annotation classes are reported. Heatmaps and locus-contribution plots mark classes with one star at P < 0.05 and with two at q < 0.05. When effect sizes are available, an absolute-effect version weights variants by posterior probability times absolute effect size. When only loci carry effects, each locus’s lead-variant effect is used. These weights are rescaled to sum to the kept variants’ posterior probabilities. The absolute-effect version is tested against the same moved copies, weighted in the same way. Each class deviation is split into additive contributions from its loci and variants, which sum to the class totals. The loci and variants are labeled with the highest-scoring Open Targets locus-to-gene genes (Mountjoy et al. 2021). Detail plots are drawn for classes with a positive deviation and a z-score of at least 1 by default, in either weighting. They show the top loci by absolute contribution and by combined contribution and effect-size rank.

Each trait with a class at q < 0.05 gets a top set of classes. Its anchor is the class with the largest deviation among those at q < 0.05. The top set holds the anchor and every class not significantly below it, so classes with larger but nonsignificant deviations join it. Credible sets whose lead variants in peaks lie within 500 kb of each other form one locus. In 1,000 bootstrap samples of these loci, the sampled loci’s contributions are summed for each class. Each class keeps the background expectation and denominator of all loci, so the samples approximate rather than repeat the analysis. They give the standard error of each class’s shortfall from the anchor. A class is excluded when a one-sided normal test of its shortfall reaches P < 0.05 divided by the number of other classes. Whichever class is the anchor, the Bonferroni inequality ensures that the top set contains the class with the largest true deviation with at least 95% probability. Traits with fewer than 10 loci get no top set, because so few loci give no reliable bootstrap. Heatmaps outline the top sets.

SCAVENGE propagation

SCAVENGE-style trait-relevance scores are calculated from the nucleus-level z-scores on the WNN graph (Yu et al. 2022). They use multiomeR’s own sparse-matrix implementation of the SCAVENGE propagation strategy rather than the reference package. The reference package’s dependencies predate the pipeline’s R environment, and the local version propagates directly over the sparse WNN graph. Nuclei whose one-sided normal-tail probability is at most 0.05 are seeds. When they exceed the maximum seed fraction, 5% of nuclei by default, those with the highest z-scores are kept. When no nucleus qualifies, all scores are zero. A shared-nearest-neighbor graph is built from the WNN neighbors and made unweighted, with every remaining edge set to one, and nuclei without edges are excluded. Seed signal is propagated by a random walk with restart probability 0.05 by default until convergence. Nuclei that no seed reaches remain unscored. Scores are capped at their 95th percentile, min–max scaled and multiplied by the mean z-score of the top 1% of nuclei. Unlike the reference, the pipeline computes no permutation P-values. The reference’s degree-matched null scatters seeds across the graph, whereas observed seeds cluster within cell types. Nearly every seeded group would therefore appear significant. Scores are summarized per metadata group.

The sparse SCAVENGE implementation is compared with its reference in Algorithm validation.

Heritability enrichment with S-LDSC

Stratified LD score regression (S-LDSC) tests whether a GWAS’s heritability is enriched in variants within the peaks accessible in each annotation class, using genome-wide summary statistics rather than fine-mapped loci (Finucane et al. 2015, 2018). It uses the peaks and the ATAC counts summed by the final WNN cell-type labels of the pseudobulk chromVAR analysis. Each class’s counts are divided by its total, and each peak’s depth-normalized values are divided by their sum across classes. A peak’s annotation value for a class is thus its share of the summed class profiles: the chromVAR background model’s observed-over-expected ratio divided by the number of classes. A peak equally accessible in all classes therefore gets the same small value in each. An all-peaks annotation marks every peak with reads. Reference variants inside a peak take its values, and all other variants take zero. LD scores of these annotations are computed from the 1000 Genomes European samples on GRCh38 (1000 Genomes Project Consortium 2015) for HapMap3 regression variants outside the MHC, with ldsc’s bias-corrected squared correlation summed over a 1 cM window (Bulik-Sullivan et al. 2015). Summary statistics are taken from the GWAS Catalog, from its harmonized file where one exists and otherwise from the submitted file (Cerezo et al. 2025). A GWAS can instead name another Catalog study or its own summary statistics in GWAS-SSF format on GRCh38 with rsIDs (Hayhurst et al. 2022), such as a consortium release that the Catalog lacks. The statistics are cleaned largely as ldsc does, without its imputation-quality filter. Variants need an rsID, a P-value within the double-precision range, alleles that match the reference without strand ambiguity, and a minor-allele frequency above 0.01 when one is reported. Variants whose sample size is below two-thirds of the 90th percentile are removed. Studies without per-variant sample sizes use the total of the samples in the summary statistics’ GWAS-SSF metadata, which also gives the sample size and ancestry shown for each trait. Each class is fitted separately, jointly with the all-peaks annotation and the 97 annotations of the baseline-LD v2.2 model (Gazal et al. 2017). The class coefficient therefore measures heritability per variant beyond accessible chromatin in general and the baseline functional categories. Regression weights follow ldsc but are computed once per GWAS from the shared annotations. Variants with a chi-square statistic above 80, or above 0.001 times the largest sample size when that is larger, are excluded. Standard errors come from a jackknife over 200 blocks of adjacent variants. A one-sided P-value tests for a positive coefficient, and Benjamini–Hochberg-adjusted values across all traits and classes are reported. The standardized effect size tau* scales the coefficient by the annotation’s standard deviation and the number of common variants relative to total heritability. It is left missing when the total heritability estimate is not positive. GWAS without genome-wide summary statistics in the GWAS Catalog or a named file are not analyzed, and non-European GWAS are analyzed with the European reference.

Cell-type gene expression is tested in the same way, following LDSC-SEG (Finucane et al. 2018). The GEX counts of the donor pseudobulks are summed by class and divided by each class’s total. A gene’s specificity for a class is its share of these depth-normalized values summed across classes (Skene et al. 2018). A gene counts as expressed in a class with at least 10 counts and one count per million there. Each class’s gene annotation marks the reference variants within 100 kb of the gene bodies of its most specific expressed genes. These number 10% of the autosomal protein-coding genes expressed in any class, and an all-genes annotation marks the windows of all of them. Where windows overlap, a variant takes the largest value, which for these binary annotations is their union. Each class is fitted in three models with the baseline-LD annotations: its peak annotation with the all-peaks annotation, its gene annotation with the all-genes annotation, and both together with both controls. In the joint model, each coefficient measures the heritability that one modality explains beyond the other. All models share the regression weights of the baseline and all-peaks annotations and the same jackknife blocks. Benjamini–Hochberg adjustment is applied separately to each model and annotation.

For each model and tested annotation, each trait with a class at q < 0.05 gets a top set of classes. Its anchor is the class with the largest tau* among those at q < 0.05. The top set holds the anchor and every class not significantly below it, so classes with larger but nonsignificant tau* join it. All classes share the jackknife blocks. The standard error of each class’s shortfall from the anchor therefore comes from the paired delete-one-block estimates of both tau* values, each scaled by its full-data total heritability. A class is excluded when a one-sided normal test of its shortfall reaches P < 0.05 divided by the number of other classes. Whichever class is the anchor, the Bonferroni inequality ensures that the top set contains the class with the largest true tau* with at least 95% probability. Heatmaps of the peak model colour each class by tau*. They mark classes with one star at P < 0.05 and with two at q < 0.05, and outline the top sets.

The robustness of each coefficient at q < 0.05 is read from the jackknife. The blocks whose single deletion lowers the coefficient most are deleted together, 1, 5 or 10 at a time, and the model is refitted. The share of the coefficient they carry is reported, with the z-score without them from a jackknife over the remaining blocks. A coefficient that spread evenly over the genome would lose a share close to the deleted fraction of blocks, plus noise. Blocks span about 15 Mb, so this measures concentration only coarsely. Variants above the chi-square cap never enter the fits, so the loci with the largest effects never contribute.

Annotation strategies are compared at matched sizes, because enrichment depends on how much of the genome an annotation covers. For each class, peaks are ranked by their accessibility share and gene windows by expression specificity. A variant in overlapping windows takes the highest specificity among them. Peaks or window pieces are added in this order until they hold 0.5%, 1%, 2% or 5% of the common (MAF > 5%) reference variants. Pieces are kept whole and ties keep genomic order, so an annotation can exceed its share by one piece. All consensus peaks together hold about 10% of common variants, so larger peak annotations would lose their class specificity. A reference annotation of each strategy ranks the same peaks or genes at random. Each binary annotation is fitted with the 97 baseline-LD annotations, which also set the regression weights. Its heritability share sums the fitted per-variant heritability of the whole model over the annotation’s common variants, as ldsc’s Prop._h2 does (Finucane et al. 2015). Heritability enrichment divides this share by the annotation’s share of common variants, with a ratio jackknife standard error over the same 200 blocks. The chi-square cap removes the strongest loci from this statistic. A complementary statistic uses the fine-mapped credible sets of each GWAS instead. Fine-mapped enrichment divides the annotation’s share of the summed posterior inclusion probabilities of autosomal credible-set variants by its share of common variants. Variants are assigned by position, so indels and variants missing from the reference count. Its uncertainty comes from 1,000 bootstrap samples of loci, which group the credible sets whose centres lie within 500 kb of each other. Fine-mapping methods differ between sources and some use functional priors, so each result keeps its source’s method. Pairs of GWAS and class are called enriched when a single-modality model reaches q < 0.05. Summaries across pairs or GWAS report medians with 95% intervals from 1,000 bootstrap samples of GWAS. A strategy’s specificity is each GWAS’s median enrichment in its enriched classes divided by that in its other classes, when both are positive. Small peak annotations hold only the credible-set variants inside them, while gene windows hold whole credible sets, so imprecise fine-mapping lowers the fine-mapped enrichment of peaks more.

Agreement with pseudobulk chromVAR is summarized for each GWAS by the Spearman correlation of the two methods’ z-scores across classes. For each class, it is the correlation across GWAS after each method’s z-scores are standardized within each GWAS.

How the R implementation of S-LDSC was compared with ldsc is described in Algorithm validation.

Source and target graphs

extra_targets/module_genetic_enrichment/targets.R selects the aggregations whose modules include genetic_enrichment, resolves one configured Open Targets study set per aggregation, attaches symbols for the primary-module inputs it consumes, and maps the target files in its directory. Its shared targets download the S-LDSC reference and each distinct GWAS’s summary statistics once for all aggregations.

Source: extra_targets/module_genetic_enrichment/, R/open_targets_helpers.R, R/GWAS_chromVAR_input_helpers.R, R/GWAS_chromVAR_helpers.R, R/GWAS_chromVAR_absolute_effect_helpers.R, R/GWAS_chromVAR_contribution_helpers.R, R/SCAVENGE_helpers.R, R/SLDSC_helpers.R, R/SLDSC_annotation_evaluation_helpers.R.

Nucleus-level enrichment and SCAVENGE

This view covers the GWAS inputs, the chromVAR background shared with the motif analysis, and SCAVENGE propagation over the WNN graph to trait-relevance summaries.

%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryTextColor': '#1f2937',
    'lineColor': '#4b5563',
    'clusterBkg': '#f8fafc',
    'clusterBorder': '#cbd5e1',
    'edgeLabelBackground': '#ffffff00',
    'fontFamily': 'Helvetica, Arial, sans-serif'
  },
  'flowchart': {
    'defaultRenderer': 'elk'
  },
  'themeCSS': '.cluster rect { fill: #f8fafc !important; stroke: #cbd5e1 !important; } .cluster-label text, .cluster-label span { font-weight: 700 !important; font-size: 16px !important; fill: #475569 !important; color: #475569 !important; }'
}}%%
%%{init: {'flowchart': {'defaultRenderer': 'elk'}}}%%
flowchart TB
  chromVAR_obj.ATAC.ENCODE_heart_LV_6x(["chromVAR_obj.ATAC.&lt;aggregation_name&gt;"]):::none --> chromVAR_background_bins.ATAC.ENCODE_heart_LV_6x(["chromVAR_background_bins.ATAC.&lt;aggregation_name&gt;"]):::none
  chromVAR_peak_expectation.ATAC.ENCODE_heart_LV_6x(["chromVAR_peak_expectation.ATAC.&lt;aggregation_name&gt;"]):::none --> chromVAR_background_bins.ATAC.ENCODE_heart_LV_6x(["chromVAR_background_bins.ATAC.&lt;aggregation_name&gt;"]):::none
  chromVAR_obj.ATAC.ENCODE_heart_LV_6x(["chromVAR_obj.ATAC.&lt;aggregation_name&gt;"]):::none --> chromVAR_peak_expectation.ATAC.ENCODE_heart_LV_6x(["chromVAR_peak_expectation.ATAC.&lt;aggregation_name&gt;"]):::none
  chromVAR_z_score_records.single_nucleus.genetic_enrichment.immune_human_2x["chromVAR_z_score_records.single_nucleus.&lt;module_name&gt;.&lt;aggregation_name&gt;"]:::none --> TRS_tibbles.WNN_harmony_SNN.SCAVENGE.single_nucleus.genetic_enrichment.immune_human_2x["TRS_tibbles.WNN_harmony_SNN.SCAVENGE.single_nucleus.&lt;module_name&gt;.&lt;aggregation_name&gt;"]:::none
  graph_matrix.WNN_harmony_SNN.SCAVENGE.single_nucleus.genetic_enrichment.immune_human_2x(["graph_matrix.WNN_harmony_SNN.SCAVENGE.single_nucleus.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> TRS_tibbles.WNN_harmony_SNN.SCAVENGE.single_nucleus.genetic_enrichment.immune_human_2x["TRS_tibbles.WNN_harmony_SNN.SCAVENGE.single_nucleus.&lt;module_name&gt;.&lt;aggregation_name&gt;"]:::none
  chromVAR_obj.ATAC.ENCODE_heart_LV_6x(["chromVAR_obj.ATAC.&lt;aggregation_name&gt;"]):::none --> chromVAR_z_score_records.single_nucleus.genetic_enrichment.immune_human_2x["chromVAR_z_score_records.single_nucleus.&lt;module_name&gt;.&lt;aggregation_name&gt;"]:::none
  chromVAR_background_bins.ATAC.ENCODE_heart_LV_6x(["chromVAR_background_bins.ATAC.&lt;aggregation_name&gt;"]):::none --> chromVAR_z_score_records.single_nucleus.genetic_enrichment.immune_human_2x["chromVAR_z_score_records.single_nucleus.&lt;module_name&gt;.&lt;aggregation_name&gt;"]:::none
  chromVAR_peak_expectation.ATAC.ENCODE_heart_LV_6x(["chromVAR_peak_expectation.ATAC.&lt;aggregation_name&gt;"]):::none --> chromVAR_z_score_records.single_nucleus.genetic_enrichment.immune_human_2x["chromVAR_z_score_records.single_nucleus.&lt;module_name&gt;.&lt;aggregation_name&gt;"]:::none
  GWAS_peak_weight_records.genetic_enrichment.immune_human_2x["GWAS_peak_weight_records.&lt;module_name&gt;.&lt;aggregation_name&gt;"]:::none --> chromVAR_z_score_records.single_nucleus.genetic_enrichment.immune_human_2x["chromVAR_z_score_records.single_nucleus.&lt;module_name&gt;.&lt;aggregation_name&gt;"]:::none
  chromVAR_obj.ATAC.ENCODE_heart_LV_6x(["chromVAR_obj.ATAC.&lt;aggregation_name&gt;"]):::none --> GWAS_peak_weight_records.genetic_enrichment.immune_human_2x["GWAS_peak_weight_records.&lt;module_name&gt;.&lt;aggregation_name&gt;"]:::none
  open_targets_credible_set_dataset_path(["open_targets_credible_set_dataset_path"]):::none --> GWAS_inputs_tibble.genetic_enrichment.immune_human_2x(["GWAS_inputs_tibble.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  open_targets_credible_set_dataset_path(["open_targets_credible_set_dataset_path"]):::none --> GWAS_peak_weight_records.genetic_enrichment.immune_human_2x["GWAS_peak_weight_records.&lt;module_name&gt;.&lt;aggregation_name&gt;"]:::none
  TRS_tibbles.WNN_harmony_SNN.SCAVENGE.single_nucleus.genetic_enrichment.immune_human_2x["TRS_tibbles.WNN_harmony_SNN.SCAVENGE.single_nucleus.&lt;module_name&gt;.&lt;aggregation_name&gt;"]:::none --> TRS_summary_tibble.WNN_harmony_SNN.SCAVENGE.single_nucleus.genetic_enrichment.immune_human_2x(["TRS_summary_tibble.WNN_harmony_SNN.SCAVENGE.single_nucleus.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none

Cell-type absolute effects

This view covers the absolute-effect branch, which weights variants by posterior probability times effect size.

%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryTextColor': '#1f2937',
    'lineColor': '#4b5563',
    'clusterBkg': '#f8fafc',
    'clusterBorder': '#cbd5e1',
    'edgeLabelBackground': '#ffffff00',
    'fontFamily': 'Helvetica, Arial, sans-serif'
  },
  'flowchart': {
    'defaultRenderer': 'elk'
  },
  'themeCSS': '.cluster rect { fill: #f8fafc !important; stroke: #cbd5e1 !important; } .cluster-label text, .cluster-label span { font-weight: 700 !important; font-size: 16px !important; fill: #475569 !important; color: #475569 !important; }'
}}%%
%%{init: {'flowchart': {'defaultRenderer': 'elk'}}}%%
flowchart TB
  GWAS_absolute_effect_peak_weight_records.genetic_enrichment.immune_human_2x(["GWAS_absolute_effect_peak_weight_records.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> GWAS_absolute_effect_peak_weight_matrix.genetic_enrichment.immune_human_2x(["GWAS_absolute_effect_peak_weight_matrix.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  GWAS_absolute_effect_peak_weight_matrix.genetic_enrichment.immune_human_2x(["GWAS_absolute_effect_peak_weight_matrix.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> chromVAR_absolute_effect_deviation_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_absolute_effect_deviation_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none

Cell-type contributions and locus attribution

This view covers the annotation-class pseudobulk deviations and their decomposition into contributing peaks, variants and loci.

%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryTextColor': '#1f2937',
    'lineColor': '#4b5563',
    'clusterBkg': '#f8fafc',
    'clusterBorder': '#cbd5e1',
    'edgeLabelBackground': '#ffffff00',
    'fontFamily': 'Helvetica, Arial, sans-serif'
  },
  'flowchart': {
    'defaultRenderer': 'elk'
  },
  'themeCSS': '.cluster rect { fill: #f8fafc !important; stroke: #cbd5e1 !important; } .cluster-label text, .cluster-label span { font-weight: 700 !important; font-size: 16px !important; fill: #475569 !important; color: #475569 !important; }'
}}%%
%%{init: {'flowchart': {'defaultRenderer': 'elk'}}}%%
flowchart TB
  chromVAR_peak_contribution_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_peak_contribution_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> chromVAR_deviation_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_deviation_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  chromVAR_variant_contribution_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_variant_contribution_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> chromVAR_locus_contribution_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_locus_contribution_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  chromVAR_background_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_background_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> chromVAR_peak_contribution_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_peak_contribution_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  GWAS_peak_weight_matrix.genetic_enrichment.immune_human_2x(["GWAS_peak_weight_matrix.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> chromVAR_peak_contribution_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_peak_contribution_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  GWAS_inputs_tibble.genetic_enrichment.immune_human_2x(["GWAS_inputs_tibble.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> chromVAR_peak_contribution_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_peak_contribution_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  chromVAR_peak_contribution_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_peak_contribution_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> chromVAR_variant_contribution_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_variant_contribution_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  cell_type_pseudobulk_counts_BPCells_matrix_dir.ATAC.genetic_enrichment.immune_human_2x(["cell_type_pseudobulk_counts_BPCells_matrix_dir.ATAC.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> chromVAR_background_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_background_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  cell_type_pseudobulk_counts_BPCells_matrix_dir.ATAC.genetic_enrichment.immune_human_2x(["cell_type_pseudobulk_counts_BPCells_matrix_dir.ATAC.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> chromVAR_peak_contribution_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_peak_contribution_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  cell_type_pseudobulk_counts_BPCells_matrix_dir.ATAC.genetic_enrichment.immune_human_2x(["cell_type_pseudobulk_counts_BPCells_matrix_dir.ATAC.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> chromVAR_deviation_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_deviation_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  chromVAR_background_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_background_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> chromVAR_deviation_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["chromVAR_deviation_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none

S-LDSC heritability enrichment

This view covers the shared LD reference and summary statistics, the cell-type peak and gene annotations with their LD scores, the S-LDSC fits and the matched-size comparison of annotation strategies.

%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryTextColor': '#1f2937',
    'lineColor': '#4b5563',
    'clusterBkg': '#f8fafc',
    'clusterBorder': '#cbd5e1',
    'edgeLabelBackground': '#ffffff00',
    'fontFamily': 'Helvetica, Arial, sans-serif'
  },
  'flowchart': {
    'defaultRenderer': 'elk'
  },
  'themeCSS': '.cluster rect { fill: #f8fafc !important; stroke: #cbd5e1 !important; } .cluster-label text, .cluster-label span { font-weight: 700 !important; font-size: 16px !important; fill: #475569 !important; color: #475569 !important; }'
}}%%
%%{init: {'flowchart': {'defaultRenderer': 'elk'}}}%%
flowchart TB
  SLDSC_reference_dir(["SLDSC_reference_dir"]):::none --> SLDSC_baseline_record(["SLDSC_baseline_record"]):::none
  SLDSC_gene_specificity_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_gene_specificity_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> SLDSC_gene_annotation_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_gene_annotation_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_reference_dir(["SLDSC_reference_dir"]):::none --> SLDSC_gene_LD_score_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_gene_LD_score_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_gene_annotation_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_gene_annotation_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> SLDSC_gene_LD_score_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_gene_LD_score_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_reference_dir(["SLDSC_reference_dir"]):::none --> SLDSC_LD_score_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_LD_score_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_gene_specificity_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_gene_specificity_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> SLDSC_matched_annotation_record.cell_type_pseudobulk.genes.genetic_enrichment.immune_human_2x(["SLDSC_matched_annotation_record.cell_type_pseudobulk.genes.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_reference_dir(["SLDSC_reference_dir"]):::none --> SLDSC_matched_annotation_record.cell_type_pseudobulk.genes.genetic_enrichment.immune_human_2x(["SLDSC_matched_annotation_record.cell_type_pseudobulk.genes.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_reference_dir(["SLDSC_reference_dir"]):::none --> SLDSC_matched_annotation_record.cell_type_pseudobulk.peaks.genetic_enrichment.immune_human_2x(["SLDSC_matched_annotation_record.cell_type_pseudobulk.peaks.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> SLDSC_matched_enrichment_summary_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_matched_enrichment_summary_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_cell_type_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_cell_type_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_reference_dir(["SLDSC_reference_dir"]):::none --> SLDSC_matched_LD_score_record.cell_type_pseudobulk.genes.genetic_enrichment.immune_human_2x(["SLDSC_matched_LD_score_record.cell_type_pseudobulk.genes.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_matched_annotation_record.cell_type_pseudobulk.genes.genetic_enrichment.immune_human_2x(["SLDSC_matched_annotation_record.cell_type_pseudobulk.genes.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> SLDSC_matched_LD_score_record.cell_type_pseudobulk.genes.genetic_enrichment.immune_human_2x(["SLDSC_matched_LD_score_record.cell_type_pseudobulk.genes.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_reference_dir(["SLDSC_reference_dir"]):::none --> SLDSC_matched_LD_score_record.cell_type_pseudobulk.peaks.genetic_enrichment.immune_human_2x(["SLDSC_matched_LD_score_record.cell_type_pseudobulk.peaks.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_matched_annotation_record.cell_type_pseudobulk.peaks.genetic_enrichment.immune_human_2x(["SLDSC_matched_annotation_record.cell_type_pseudobulk.peaks.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> SLDSC_matched_LD_score_record.cell_type_pseudobulk.peaks.genetic_enrichment.immune_human_2x(["SLDSC_matched_LD_score_record.cell_type_pseudobulk.peaks.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_sumstats_rows["SLDSC_sumstats_rows"]:::none --> SLDSC_sumstats_records["SLDSC_sumstats_records"]:::none
  SLDSC_baseline_record(["SLDSC_baseline_record"]):::none --> SLDSC_cell_type_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_cell_type_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_sumstats_records["SLDSC_sumstats_records"]:::none --> SLDSC_cell_type_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_cell_type_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_gene_LD_score_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_gene_LD_score_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> SLDSC_cell_type_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_cell_type_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_LD_score_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_LD_score_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> SLDSC_cell_type_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_cell_type_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_sumstats_records["SLDSC_sumstats_records"]:::none --> SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_baseline_record(["SLDSC_baseline_record"]):::none --> SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_matched_LD_score_record.cell_type_pseudobulk.genes.genetic_enrichment.immune_human_2x(["SLDSC_matched_LD_score_record.cell_type_pseudobulk.genes.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_matched_annotation_record.cell_type_pseudobulk.genes.genetic_enrichment.immune_human_2x(["SLDSC_matched_annotation_record.cell_type_pseudobulk.genes.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_matched_LD_score_record.cell_type_pseudobulk.peaks.genetic_enrichment.immune_human_2x(["SLDSC_matched_LD_score_record.cell_type_pseudobulk.peaks.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_matched_annotation_record.cell_type_pseudobulk.peaks.genetic_enrichment.immune_human_2x(["SLDSC_matched_annotation_record.cell_type_pseudobulk.peaks.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none --> SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_matched_enrichment_tibble.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_baseline_record(["SLDSC_baseline_record"]):::none --> SLDSC_gene_LD_score_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_gene_LD_score_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_baseline_record(["SLDSC_baseline_record"]):::none --> SLDSC_LD_score_record.cell_type_pseudobulk.genetic_enrichment.immune_human_2x(["SLDSC_LD_score_record.cell_type_pseudobulk.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_baseline_record(["SLDSC_baseline_record"]):::none --> SLDSC_matched_LD_score_record.cell_type_pseudobulk.genes.genetic_enrichment.immune_human_2x(["SLDSC_matched_LD_score_record.cell_type_pseudobulk.genes.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_baseline_record(["SLDSC_baseline_record"]):::none --> SLDSC_matched_LD_score_record.cell_type_pseudobulk.peaks.genetic_enrichment.immune_human_2x(["SLDSC_matched_LD_score_record.cell_type_pseudobulk.peaks.&lt;module_name&gt;.&lt;aggregation_name&gt;"]):::none
  SLDSC_baseline_record(["SLDSC_baseline_record"]):::none --> SLDSC_sumstats_records["SLDSC_sumstats_records"]:::none
  SLDSC_baseline_record(["SLDSC_baseline_record"]):::none --> SLDSC_sumstats_rows["SLDSC_sumstats_rows"]:::none

1000 Genomes Project Consortium. 2015. “A Global Reference for Human Genetic Variation.” Nature 526: 68–74. https://doi.org/10.1038/nature15393.
Bulik-Sullivan, Brendan K., Po-Ru Loh, Hilary K. Finucane, et al. 2015. “LD Score Regression Distinguishes Confounding from Polygenicity in Genome-Wide Association Studies.” Nature Genetics 47: 291–95. https://doi.org/10.1038/ng.3211.
Buniello, Annalisa, Daniel Suveges, Carlos Cruz-Castillo, et al. 2025. “Open Targets Platform: Facilitating Therapeutic Hypotheses Building in Drug Discovery.” Nucleic Acids Research 53 (D1): D1467–75. https://doi.org/10.1093/nar/gkae1128.
Cerezo, Maria, Elliot Sollis, Yue Ji, et al. 2025. “The NHGRI-EBI GWAS Catalog: Standards for Reusability, Sustainability and Diversity.” Nucleic Acids Research 53 (D1): D998–1005. https://doi.org/10.1093/nar/gkae1070.
Cui, Ran, Roy A. Elzur, Masahiro Kanai, et al. 2024. “Improving Fine-Mapping by Modeling Infinitesimal Effects.” Nature Genetics 56 (1): 162–69. https://doi.org/10.1038/s41588-023-01597-3.
Farh, Kyle Kai-How, Alexander Marson, Jiang Zhu, et al. 2015. “Genetic and Epigenetic Fine Mapping of Causal Autoimmune Disease Variants.” Nature 518 (7539): 337–43. https://doi.org/10.1038/nature13835.
Finucane, Hilary K., Brendan Bulik-Sullivan, Alexander Gusev, et al. 2015. “Partitioning Heritability by Functional Annotation Using Genome-Wide Association Summary Statistics.” Nature Genetics 47: 1228–35. https://doi.org/10.1038/ng.3404.
Finucane, Hilary K., Yakir A. Reshef, Verneri Anttila, et al. 2018. “Heritability Enrichment of Specifically Expressed Genes Identifies Disease-Relevant Tissues and Cell Types.” Nature Genetics 50: 621–29. https://doi.org/10.1038/s41588-018-0081-4.
Gazal, Steven, Hilary K. Finucane, Nicholas A. Furlotte, et al. 2017. “Linkage Disequilibrium-Dependent Architecture of Human Complex Traits Shows Action of Negative Selection.” Nature Genetics 49: 1421–27. https://doi.org/10.1038/ng.3954.
Germain, Pierre-Luc. 2026. betterChromVAR. Bioconductor. https://doi.org/10.18129/B9.bioc.betterChromVAR.
Hayhurst, James, Annalisa Buniello, Laura Harris, et al. 2022. “A Community Driven GWAS Summary Statistics Standard.” bioRxiv, ahead of print. https://doi.org/10.1101/2022.07.15.500230.
Mountjoy, Edward, Ellen M. Schmidt, Miguel Carmona, et al. 2021. “An Open Approach to Systematically Prioritize Causal Variants and Genes at All Published Human GWAS Trait-Associated Loci.” Nature Genetics 53 (11): 1527–33. https://doi.org/10.1038/s41588-021-00945-5.
Schep, Alicia N., Beijing Wu, Jason D. Buenrostro, and William J. Greenleaf. 2017. “chromVAR: Inferring Transcription-Factor-Associated Accessibility from Single-Cell Epigenomic Data.” Nature Methods 14 (10): 975–78. https://doi.org/10.1038/nmeth.4401.
Skene, Nathan G., Julien Bryois, Trygve E. Bakken, et al. 2018. “Genetic Identification of Brain Cell Types Underlying Schizophrenia.” Nature Genetics 50: 825–33. https://doi.org/10.1038/s41588-018-0129-5.
Ulirsch, Jacob C., Caleb A. Lareau, Erik L. Bao, et al. 2019. “Interrogation of Human Hematopoiesis at Single-Cell and Single-Variant Resolution.” Nature Genetics 51 (4): 683–93. https://doi.org/10.1038/s41588-019-0362-6.
Wang, Gao, Abhishek Sarkar, Peter Carbonetto, and Matthew Stephens. 2020. “A Simple New Approach to Variable Selection in Regression, with Application to Genetic Fine Mapping.” Journal of the Royal Statistical Society: Series B (Statistical Methodology) 82 (5): 1273–300. https://doi.org/10.1111/rssb.12388.
Yu, Fulong, Liam D. Cato, Chen Weng, et al. 2022. “Variant to Function Mapping at Single-Cell Resolution Through Network Propagation.” Nature Biotechnology 40: 1644–53. https://doi.org/10.1038/s41587-022-01341-y.