Skip to content

I/O and Merging

GraphLD provides helpers to load LDGMs, read metadata, partition summary statistics across LD blocks, and merge variants onto LDGM indices.

Start by loading metadata:

import graphld as gld
import polars as pl

ldgm_metadata: pl.DataFrame = gld.read_ldgm_metadata(
    "data/test/metadata.csv",
    populations=["EUR"],
)

Then partition summary statistics across LD blocks:

sumstats: pl.DataFrame = gld.read_ldsc_sumstats("data/test/example.sumstats")
partitioned_sumstats = gld.partition_variants(ldgm_metadata, sumstats)

Load LDGMs and merge them with summary statistics:

merged_ldgms = []
for row, df in zip(ldgm_metadata.iter_rows(named=True), partitioned_sumstats):
    ldgm = gld.load_ldgm(
        filepath="data/test/" + row["name"],
        snplist_path="data/test/" + row["snplistName"],
    )
    ldgm, _ = gld.merge_snplists(ldgm, df)
    merged_ldgms.append(ldgm)

After merging, each ldgm.variant_info table carries the summary-statistics columns for matched variants:

for ldgm in merged_ldgms:
    z_scores = (
        ldgm.variant_info.group_by("index", maintain_order=True)
        .agg(pl.col("Z").first())
        .select("Z")
        .to_numpy()
    )
    solution = ldgm.solve(z_scores)

See also: