sdtemple / isweep

Statistical inference of recent positive selection using IBD segments
https://github.com/sdtemple/isweep
Creative Commons Zero v1.0 Universal
4 stars 0 forks source link
coalescent identity-by-descent selective-sweeps snakemake-pipelines

Statistical inference using long IBD segments

New features are actively under construction (Fall 2024).

Contact sethtem@umich.edu or Github issues for troubleshooting.

See misc/announcements.md for high-level updates on this repo.

See misc/fixes.md for any major bug fixes.

See misc/usage.md to evaluate if this methodology fits your study.

See misc/cluster-options.md for some suggested cluster options to use in pipelines.

See on GitHub "Issues/Closed" for some comments I/Seth left about the pipeline.

Citation

Please cite if you use this package.

Methods to model selection:

Temple, S.D., Waples, R.K., Browning, S.R. (2024). Modeling recent positive selection using identity-by-descent segments. The American Journal of Human Genetics. https://doi.org/10.1016/j.ajhg.2024.08.023.

Methods to simulate IBD segments and our central limit theorems:

Temple, S.D., Thompson, E.A. (2024). Identity-by-descent in large samples. Preprint at bioRxiv, 2024.06.05.597656. https://www.biorxiv.org/content/10.1101/2024.06.05.597656v1.

Multiple testing correction for selection scan

Temple, S.D. (2024). "Statistical Inference using Identity-by-Descent Segments: Perspectives on Recent Positive Selection. PhD thesis (University of Washington). https://www.proquest.com/docview/3105584569?sourcetype=Dissertations%20&%20Theses.

Methodology

Acronym: incomplete Selective sweep With Extended haplotypes Estimation Procedure

This software presents methods to study recent, strong positive selection.

The methods relate lengths of IBD segments to a coalescent model under selection.

We assume 1 selected allele at a locus.

Our methods are implemented automatically in a snakemake pipeline:

  1. A genome-wide selection scan for anomalously large IBD rates
    • With multiple testing correction
  2. Inferring anomalously large IBD clusters
  3. Ranking alleles based on evidence for selection
  4. Computing a measure of cluster agglomeration (Gini impurity index)
  5. Estimating frequency and location of unknown sweeping allele
  6. Estimating a selection coefficient
  7. Estimating a confidence interval

The input data is:

See misc/usage.md.

The chromosome numbers in genetic maps should match the chromosome numbers in VCFs.

The genetic maps should be tab-separated.

Repository overview

This repository contains a Python package and some Snakemake bioinformatics pipelines.

You should run all snakemake pipelines in their workflow/some-pipeline/.

You should be in the mamba activate isweep environment for analyses.

You should run the analyses using cluster jobs.

We have made README.md files in most subfolders.

Installation

See misc/installing-mamba.md to get a Python package manager.

  1. Clone the repository
    git clone https://github.com/sdtemple/isweep.git 
  2. Get the Python package
    mamba env create -f isweep-environment.yml
    mamba activate isweep
    python -c 'import site; print(site.getsitepackages())'
  3. Download software.
    bash get-software.sh software 
    • Puts these in a folder called software/.
    • Requires wget.
    • For simulation study, download SLiM yourself.
    • Put in software/.
    • https://messerlab.org/slim/
    • You need to cite these software.

See workflow/other-methods/ folder for how we run methods we compare to.

Running the procedure:

This is the overall procedure. You will see more details for each step in workflow/some-pipeline/README.md files.

Pre-processing

Phase data w/ Beagle or Shapeit beforehand. Subset data in light of global ancestry and close relatedness.

Main analysis

  1. Make pointers to large (phased) vcf files.
  2. Edit YAML files in the different workflow directories.
  3. Run the selection scan (workflow/scan).
    nohup snakemake -s Snakefile-scan.smk -c1 --cluster "[options]" --jobs X --configfile *.yaml & 
    • See the file misc/cluster-options.md for support.
    • Recommendation: do a test run with your 2 smallest chromosomes.
    • Check *.log files from ibd-ends. If it recommends an estimated err, change error rate in YAML file.
    • Then, run with all your chromosomes.
  4. Estimate recent effective sizes :workflow/scan/scripts/run-ibdne.sh.
  5. Make the Manhattan plot: workflow/scan/scripts/manhattan.py.
  6. Checkout the roi.tsv file.
    • Edit with locus names if you want.
    • Edit to change defaults: additive model and 95% confidence intervals.
  7. Run the region of interest analysis (workflow/roi).
    nohup snakemake -s Snakefile-roi.smk -c1 --cluster "[options]" --jobs X --configfile *.yaml & 

Picture of selection scan workflow

The flow chart below shows the steps ("rules") in the selection scan pipeline.

Diverting paths "mle" versus "scan" refer to different detection thresholds (3.0 and 2.0 cM).

See dag-roi.png for the steps in the sweep modeling pipeline.

Development things to do