Simulation

In this section, we demonstrate a complete simulation pipeline. Starting from reference populations in 1,000 Genomes, we simulate genotypes, phenotypes for ancestral and admixed populations.

Prepare source data

# genome build to use
BUILD=hg19
# number of admixed individuals to simulate
N_INDIV=100000
# chromosome 
CHROM=22
# number of generations
N_GEN=8

# setup
REF_DATA_DIR=data/1kg-ref-${BUILD}
RAW_DATA_DIR=data/raw
GENO_DATA_DIR=data/geno
mkdir -p ${RAW_DATA_DIR}
mkdir -p ${GENO_DATA_DIR}
admix get-1kg-ref --dir ${REF_DATA_DIR} --build ${BUILD}

# subset hapmap3 SNPs
admix subset-hapmap3 \
    --pfile ${REF_DATA_DIR}/pgen/all_chr \
    --build ${BUILD} \
    --chrom ${CHROM} \
    --out ${RAW_DATA_DIR}/hm3_chrom${CHROM}.snp

# subset individuals
for pop in CEU YRI; do
    admix subset-pop-indiv \
        --pfile ${REF_DATA_DIR}/pgen/all_chr \
        --pop ${pop} \
        --out ${RAW_DATA_DIR}/${pop}.indiv
done

# subset plink2
for pop in CEU YRI; do
    plink2 --pfile ${REF_DATA_DIR}/pgen/all_chr \
        --keep ${RAW_DATA_DIR}/${pop}.indiv \
        --extract ${RAW_DATA_DIR}/hm3_chrom${CHROM}.snp \
        --make-pgen \
        --out ${RAW_DATA_DIR}/${pop}
done

Extend ancestral populations using HAPGEN2

for pop in CEU YRI; do
    admix hapgen2 \
        --pfile ${RAW_DATA_DIR}/${pop} \
        --chrom ${CHROM} \
        --n-indiv ${N_INDIV} \
        --out ${GENO_DATA_DIR}/${pop} \
        --build ${BUILD}
done

Simulate admixed individuals

# admix-simu should be automatically installed using this command
admix admix-simu \
    --pfile-list "['../data/geno/CEU', '../data/geno/YRI']" \
    --admix-prop "[0.2,0.8]" \
    --n-indiv ${N_INDIV} \
    --n-gen ${N_GEN} \
    --build ${BUILD} \
    --out ../data/geno/admix

Rename individuals

import dapgen
import shutil
for pop in ["admix", "CEU", "YRI"]:
    df_psam = dapgen.read_psam(f"{pop}.psam").reset_index()
    # rename old files to backup
    shutil.move(f"{pop}.psam", f"{pop}.psam.bak")
    df_psam["#IID"] = [f"{pop}{i}" for i in range(len(df_psam))]
    df_psam[["#IID"]].to_csv(f"{pop}.psam", index=False, header=True)