| name | population-genetics-plink-basics |
| description | PLINK file formats, format conversion, and quality control filtering for population genetics. Convert between VCF, BED/BIM/FAM, and PED/MAP formats, apply MAF, genotyping rate, and HWE filters using PLINK 1.9 and 2.0. Use when working with PLINK format files or running QC. |
| tool_type | cli |
| primary_tool | plink |
Version Compatibility
Reference examples tested with: pandas 2.2+
Before using code patterns, verify installed versions match. If versions differ:
- Python:
pip show <package> then help(module.function) to check signatures
- CLI:
<tool> --version then <tool> --help to confirm flags
If code throws ImportError, AttributeError, or TypeError, introspect the installed
package and adapt the example to match the actual API rather than retrying.
PLINK Basics
"Convert my VCF to PLINK format and run QC" -> Handle PLINK file format conversions (VCF, BED/BIM/FAM, PED/MAP) and apply standard genotype QC filters for MAF, genotyping rate, and HWE.
- CLI:
plink2 --vcf input.vcf --make-bed for format conversion
- CLI:
plink2 --maf 0.01 --geno 0.05 --hwe 1e-6 for QC filtering
File formats, conversion, and quality control filtering with PLINK 1.9 and 2.0.
File Formats
Binary Format (Recommended)
| File | Contents |
|---|
.bed | Binary genotype data |
.bim | Variant information (chr, ID, cM, pos, A1, A2) |
.fam | Sample information (FID, IID, father, mother, sex, pheno) |
PLINK 2.0 Format
| File | Contents |
|---|
.pgen | Binary genotype data (compressed) |
.pvar | Variant information |
.psam | Sample information |
Text Format (Legacy)
| File | Contents |
|---|
.ped | Genotypes (FID, IID, father, mother, sex, pheno, genotypes) |
.map | Variant positions (chr, ID, cM, pos) |
Format Conversion
VCF to PLINK Binary
plink --vcf input.vcf.gz --make-bed --out output
plink2 --vcf input.vcf.gz --make-bed --out output
plink2 --vcf input.vcf.gz --double-id --make-bed --out output
PLINK Binary to VCF
plink --bfile input --recode vcf --out output
plink2 --bfile input --export vcf --out output
plink2 --bfile input --export vcf bgz --out output
PED/MAP to Binary (PLINK 1.9 Only)
plink --file input --make-bed --out output
Binary to PED/MAP
plink --bfile input --recode --out output
plink2 --bfile input --export ped --out output
PLINK 1.9 to 2.0 Format
plink2 --bfile input --make-pgen --out output
plink2 --pfile input --make-bed --out output
Quality Control Filtering
MAF Filter (Minor Allele Frequency)
plink --bfile input --maf 0.01 --make-bed --out output
plink2 --bfile input --maf 0.01 --make-bed --out output
plink2 --bfile input --maf 0.05 --make-bed --out output
Genotyping Rate Filters
plink2 --bfile input --geno 0.05 --make-bed --out output
plink2 --bfile input --mind 0.05 --make-bed --out output
Hardy-Weinberg Equilibrium Filter
plink2 --bfile input --hwe 1e-6 --make-bed --out output
plink2 --bfile input --hwe 1e-6 --hwe-all --make-bed --out output
Combined QC Pipeline
plink2 --bfile input \
--maf 0.01 \
--geno 0.05 \
--mind 0.05 \
--hwe 1e-6 \
--make-bed --out qc_filtered
Sample and Variant Selection
Keep/Remove Samples
plink2 --bfile input --keep samples.txt --make-bed --out output
plink2 --bfile input --remove samples.txt --make-bed --out output
plink2 --bfile input --keep-fam sample_id --make-bed --out output
Extract/Exclude Variants
plink2 --bfile input --extract variants.txt --make-bed --out output
plink2 --bfile input --exclude variants.txt --make-bed --out output
plink2 --bfile input --extract range chr1:1000000-2000000 --make-bed --out output
Chromosome Selection
plink2 --bfile input --chr 22 --make-bed --out chr22
plink2 --bfile input --chr 1-22 --make-bed --out autosomes
plink2 --bfile input --not-chr 23,24,25,26 --make-bed --out autosomes
Allele Frequency
plink --bfile input --freq --out output
plink2 --bfile input --freq --out output
plink2 --bfile input --freq cols=+mac,+mafreq --out output
Missing Data Statistics
plink2 --bfile input --missing --out output
Sex Check
Verify reported sex matches X chromosome heterozygosity.
plink --bfile input --check-sex --out sex_check
plink2 --bfile input --split-par hg38 --check-sex --out sex_check
Interpret Results
import pandas as pd
sex = pd.read_csv('sex_check.sexcheck', sep='\s+')
problems = sex[sex['STATUS'] == 'PROBLEM']
print(f'Sex mismatches: {len(problems)}')
Update or Remove
plink2 --bfile input --update-sex sex_check.sexcheck col-num=4 --make-bed --out updated
awk '$5 == "PROBLEM" {print $1, $2}' sex_check.sexcheck > sex_problems.txt
plink2 --bfile input --remove sex_problems.txt --make-bed --out output
Sample Information
Update Phenotypes
plink2 --bfile input --pheno phenotypes.txt --make-bed --out output
plink2 --bfile input --pheno phenotypes.txt --make-bed --out output
Update Sex
plink2 --bfile input --update-sex sex.txt --make-bed --out output
Update Sample IDs
plink2 --bfile input --update-ids ids.txt --make-bed --out output
Merging Datasets
plink --bfile data1 --bmerge data2.bed data2.bim data2.fam --make-bed --out merged
plink --bfile data1 --merge-list merge_list.txt --make-bed --out merged
plink --bfile data1 --bmerge data2 --make-bed --out merged
Variant Information
Set Variant IDs
plink2 --bfile input --set-all-var-ids @:#:\$r:\$a --make-bed --out output
Update Variant Names
plink2 --bfile input --update-name update.txt --make-bed --out output
PLINK 2.0 vs 1.9 Summary
| Feature | PLINK 2.0 | PLINK 1.9 |
|---|
| Status | Current | Legacy |
| Command | plink2 | plink |
| Format | .pgen/.pvar/.psam | .bed/.bim/.fam |
| Speed | Faster | Baseline |
| Memory | More efficient | Higher for large data |
| Export VCF | --export vcf | --recode vcf |
| Frequency output | ALT frequency | MAF |
| Missing output | .smiss/.vmiss | .imiss/.lmiss |
| PED/MAP support | No (convert via 1.9) | Yes (--file) |
Related Skills
- association-testing - GWAS with filtered data
- population-structure - PCA after QC
- variant-calling/vcf-basics - VCF format before conversion