graphld.simulate¶
Simulation of GWAS summary statistics.
Summary statistics can be simulated from their asymptotic distribution without individual-level genotype data. Effect sizes are drawn from a flexible mixture distribution, with Python API support for annotation-dependent effect-size scaling and frequency-dependent architectures. Annotation-dependent polygenicity is reserved for future support.
For usage examples, see the Simulation guide.
simulate
¶
Simulate GWAS summary statistics.
Simulate
dataclass
¶
Simulate(sample_size: int, heritability: float = 0.5, component_variance: Union[ndarray, List[float]] = None, component_weight: Union[ndarray, List[float]] = None, alpha_param: float = -1, annotation_dependent_polygenicity: bool = False, link_fn: Callable[[ndarray], ndarray] = _default_link_fn, random_seed: Optional[int] = None, annotation_columns: Optional[List[str]] = None)
Bases: ParallelProcessor, _SimulationSpecification
Parallel processor for simulating GWAS summary statistics.
create_shared_memory
staticmethod
¶
Create shared memory arrays for simulation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
metadata
|
DataFrame
|
Metadata DataFrame containing block information |
required |
block_data
|
list[tuple]
|
List of tuples containing block-specific annotation DataFrames |
required |
**kwargs
|
Any
|
Additional keyword arguments |
{}
|
Source code in src/graphld/simulate.py
prepare_block_data
classmethod
¶
Prepare block-specific data for processing.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
metadata
|
DataFrame
|
DataFrame containing LDGM metadata |
required |
**kwargs
|
Any
|
Additional arguments from run(), including: annotations: Optional DataFrame containing variant annotations |
{}
|
Returns:
| Type | Description |
|---|---|
list[tuple]
|
List of block-specific annotation DataFrames, or None if no annotations |
Source code in src/graphld/simulate.py
process_block
classmethod
¶
process_block(ldgm: PrecisionOperator, flag: Value, shared_data: SharedData, block_offset: int, block_data: Optional[tuple] = None, worker_params: Optional[Dict] = None) -> None
Process a single block.
Source code in src/graphld/simulate.py
supervise
classmethod
¶
supervise(manager: WorkerManager, shared_data: Dict[str, Any], block_data: list, **kwargs: Any) -> pl.DataFrame
Supervise worker processes and collect results.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
manager
|
WorkerManager
|
Worker manager |
required |
shared_data
|
Dict[str, Any]
|
Dictionary of shared memory arrays |
required |
**kwargs
|
Any
|
Additional arguments |
{}
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame containing simulated summary statistics |
Source code in src/graphld/simulate.py
simulate
¶
simulate(ldgm_metadata_path: str = 'data/ldgms/metadata.csv', populations: Optional[Union[str, List[str]]] = 'EUR', chromosomes: Optional[Union[int, List[int]]] = None, run_in_serial: bool = False, num_processes: Optional[int] = None, annotations: Optional[DataFrame] = None, verbose: bool = False) -> pl.DataFrame
Simulate genetic data.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ldgm_metadata_path
|
str
|
Path to LDGM metadata file |
'data/ldgms/metadata.csv'
|
populations
|
Optional[Union[str, List[str]]]
|
Population(s) to filter |
'EUR'
|
chromosomes
|
Optional[Union[int, List[int]]]
|
Chromosome(s) to filter |
None
|
run_in_serial
|
bool
|
Whether to run in serial mode |
False
|
annotations
|
Optional[DataFrame]
|
Optional variant annotations |
None
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
Simulated genetic data DataFrame |
Source code in src/graphld/simulate.py
run_simulate
¶
run_simulate(sample_size: int, heritability: float = 0.5, component_variance: Optional[Union[ndarray, List[float]]] = None, component_weight: Optional[Union[ndarray, List[float]]] = None, alpha_param: float = -1, annotation_dependent_polygenicity: bool = False, link_fn: Callable[[ndarray], ndarray] = _default_link_fn, random_seed: Optional[int] = None, annotation_columns: Optional[List[str]] = None, ldgm_metadata_path: str = 'data/ldgms/metadata.csv', populations: Optional[Union[str, List[str]]] = 'EUR', chromosomes: Optional[Union[int, List[int]]] = None, run_in_serial: bool = False, num_processes: Optional[int] = None, annotations: Optional[DataFrame] = None, verbose: bool = False) -> pl.DataFrame
Run GWAS summary statistics simulation with specified parameters.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
sample_size
|
int
|
Sample size for the population |
required |
heritability
|
float
|
Total heritability (h2) for the trait |
0.5
|
component_variance
|
Optional[Union[ndarray, List[float]]]
|
Per-allele effect size variance for each mixture component |
None
|
component_weight
|
Optional[Union[ndarray, List[float]]]
|
Mixture weight for each component (must sum to ≤ 1) |
None
|
alpha_param
|
float
|
Alpha parameter for allele frequency-dependent architecture |
-1
|
annotation_dependent_polygenicity
|
bool
|
Reserved for future support for using annotations to modify the proportion of causal variants. Currently raises NotImplementedError when enabled. |
False
|
link_fn
|
Callable[[ndarray], ndarray]
|
Function mapping annotation vector to relative per-variant heritability. Default is the softplus-like mapping x -> log(1 + exp(sum(x))). Must be defined at module level (not as lambda or nested function) to work with multiprocessing |
_default_link_fn
|
random_seed
|
Optional[int]
|
Random seed for reproducibility |
None
|
annotation_columns
|
Optional[List[str]]
|
List of column names to use as annotations |
None
|
ldgm_metadata_path
|
str
|
Path to LDGM metadata file |
'data/ldgms/metadata.csv'
|
populations
|
Optional[Union[str, List[str]]]
|
Population(s) to filter |
'EUR'
|
chromosomes
|
Optional[Union[int, List[int]]]
|
Chromosome(s) to filter |
None
|
run_in_serial
|
bool
|
Whether to run in serial mode |
False
|
num_processes
|
Optional[int]
|
Number of processes for parallel execution |
None
|
annotations
|
Optional[DataFrame]
|
Optional variant annotations DataFrame |
None
|
verbose
|
bool
|
Whether to print progress information |
False
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame containing simulated summary statistics |