| name | bio-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 |
PLINK Basics
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