<<寫在前面>>
PLINK 是GWAS分析中最常用的軟件之一,也常用于指代其標(biāo)準(zhǔn)基因型數(shù)據(jù)格式(PLINK 格式)。
軟件版本
PLINK v1.9.0-b.7.7 64-bit (22 Oct 2024)
官網(wǎng):https://www.cog-genomics.org/plink/1.9/
???本文所有命令均基于PLINK v1.9,不適用于PLINK v2.0。
PLINK的主要功能模塊
1. 數(shù)據(jù)格式轉(zhuǎn)換
2. 基因型數(shù)據(jù)質(zhì)控
3. 統(tǒng)計(jì)分析
4. SNP / 樣本提取與過濾
<<進(jìn)入主題>>
1. 數(shù)據(jù)格式轉(zhuǎn)換
1.1 PLINK → VCF(文本文件)
plink? --bfile? snp? ?--recode? ?vcf? ?--out? ?snp
輸出:snp.vcf
1.2 VCF → PLINK(二進(jìn)制文件)
plink??--vcf? ?snp.vcf? --make-bed? ?--out? ?snp
輸出:snp.bed + snp.bim + snp.fam
1.3 VCF → PED/MAP(文本文件)
plink ?--vcf?? snp.vcf? ??--recode? ?--out? snp
輸出:snp.ped + snp.map
1.4?PLINK → PED/MAP(文本文件)
plink??--bfile? snp? ?--recode??--out? snp
輸出:snp.ped + snp.map
2. 基因型數(shù)據(jù)質(zhì)控(QC)
2.1 Sample-level QC
2.1.1?樣本缺失率(missingness / call rate)
?? PLINK 在執(zhí)行 --mind?參數(shù)時(shí),會(huì)內(nèi)部自動(dòng)計(jì)算每個(gè)樣本的缺失率,并按閾值過濾樣本,因此無(wú)需預(yù)先計(jì)算(即使基因型文件中沒有提供)。
plink --bfile? test? --mind 0.1 --make-bed --out? test_qc
--mind 0.1,刪除基因型缺失率超過 10% (call rate < 90%)的樣本。
?? 只影響樣本,不影響 SNP
2.1.2?雜合度異常(heterozygosity)
plink --bfile data --het
F 值代表:雜合度系數(shù)
F > 0??純合偏多
F ≈ 0 正常
F < 0??雜合偏多
F ~0.01 – 0.05?是非常典型、非常健康的分布
F > 0.15–0.20:可疑(近交 / batch / ancestry)
F < ?0.15:高度懷疑污染或樣本混合
常見經(jīng)驗(yàn)閾值:|F ? mean(F)| > 3 SD?→ 異常樣本
2.1.3?重復(fù)樣本 (IBD檢查)
識(shí)別重復(fù)樣本,一、二級(jí)親屬(如果存在,通常保留一個(gè)樣本)
plink --bfile data --genome
Z0,兩個(gè)樣本共享 0 條 IBD (identity-by-descent)等位基因的概率
????????Z0 ≈ 1 → 完全不相關(guān) ;Z0 ≈ 0 → 高度相關(guān) / 重復(fù)
Z1,共享1 條 IBD 等位基因的概率,一般在親子 / 一度親屬中較高
Z2,共享2 條 IBD 等位基因的概率,Z2 ≈ 1?→ 重復(fù)樣本 / 單卵雙胞胎
PI_HAT,總體親緣系數(shù)(PI_HAT=Z2+0.5×Z1)
????????PI_HAT?~1?→?重復(fù)樣本 / 單卵雙胞胎
? ??????PI_HAT?~0.5?→?一度親屬(親子/同胞)
? ??????PI_HAT?~0.25?→?二度親屬
? ??????PI_HAT?~0?→?兩個(gè)樣本基本無(wú)關(guān)(unrelated)
2.2 SNP-level?QC
2.2.1?SNP 缺失率 (Missingness)
?? PLINK 在執(zhí)行?--geno 參數(shù)時(shí),會(huì)內(nèi)部自動(dòng)計(jì)算每個(gè) SNP 的缺失率,并按閾值過濾 SNP,因此無(wú)需預(yù)先計(jì)算(即使基因型文件中沒有提供)。
# 1.?計(jì)算并輸出缺失率,只看看分布,不做過濾(可選)
plink --bfile test --missing
--missing,只計(jì)算并輸出每個(gè) SNP 的缺失率(可選)
?? 在輸出文件中,
*.imiss 里的 F_MISS = 樣本缺失率?
*.lmiss 里的 F_MISS = SNP 缺失率
# 2. 過濾(一步到位,完全沒問題)
plink --bfile test --geno 0.05?--make-bed --out test_qc
--geno 0.05,如果某個(gè)SNP在所有樣本中缺失大于5%,刪除該SNP (常用閾值:geno ≤ 0.05)
2.2.2?次要等位基因頻率(MAF,Minor Allele Frequency)
plink --bfile test --maf 0.05 --make-bed --out test_qc
--maf 0.05,如果某個(gè)SNP的次要等位基因頻率小于0.05,刪除該SNP?(常用閾值:0.01或0.05)
2.2.3?Hardy–Weinberg 平衡(HWE)
?? PLINK 在執(zhí)行 --hwe?參數(shù)時(shí),會(huì)內(nèi)部自動(dòng)計(jì)算每個(gè) SNP 的 HWE P-value,并按閾值過濾 SNP,因此無(wú)需預(yù)先計(jì)算(即使基因型文件中沒有提供)。
# 1. 計(jì)算并輸出HWE?P-value,只看看分布,不做過濾(可選)
plink --bfile?data?--hardy?--out data
--hardy,只計(jì)算并輸出每個(gè) SNP 的 HWE 統(tǒng)計(jì)量(可選)
輸出文件: data.hwe,包含每個(gè) SNP 的 HWE P-value
# 2. 過濾(一步到位,完全沒問題):用于刪除由于分型錯(cuò)誤或批次效應(yīng)帶來(lái)的異常位點(diǎn)
plink --bfile data --hwe 1e-6 --make-bed --out?qc_hwe
--hwe 1e-6,內(nèi)部計(jì)算并過濾,如果某個(gè)SNP 的 HWE?P-value 小于 1e-6,刪除該SNP?(常用閾值:?1e-6,病例樣本可放寬)
2.2.4?次要等位基因計(jì)數(shù)(MAC,Minor Allele Count?)
?? 小樣本強(qiáng)烈推薦,比 MAF 更穩(wěn)?。╯c-eQTL 常用)
一行代碼實(shí)現(xiàn):Plink內(nèi)部自動(dòng)計(jì)算每個(gè)SNP的MAC + 自動(dòng)刪除MAC < 20 的SNP
plink --bfile data --mac 20 --make-bed --out qc_mac
--mac 20,僅保留 MAC ≥ 20 的 SNP
?? INFO → MAC:如果是Imputation結(jié)果,先按INFO過濾,再按MAC過濾
2.2.5 典型QC組合
應(yīng)用場(chǎng)景:對(duì)基因型數(shù)據(jù)執(zhí)行一套標(biāo)準(zhǔn)的質(zhì)量控制(QC)流程。
在樣本層面,--mind 0.1用于刪除基因型缺失率大于 10% 的低質(zhì)量樣本;在位點(diǎn)層面,--geno 0.05用于去除在所有樣本中缺失率超過 5% 的 SNP,--maf 0.05用于過濾次要等位基因頻率低于 5% 的低頻變異,而--hwe 1e-6則用于剔除在?Hardy–Weinberg 平衡檢驗(yàn)中顯著偏離(P < 1×10??)的異常位點(diǎn)。
經(jīng)過上述過濾后,保留下來(lái)的高質(zhì)量基因型數(shù)據(jù)被重新導(dǎo)出為 PLINK 二進(jìn)制格式(--make-bed),并保存為新的數(shù)據(jù)集,用于后續(xù)分析。
plink --bfile data? \
????--mind 0.1 \? ? ? ?
? ? --geno 0.05 \????????
????--maf 0.05?\? ??
????--hwe 1e-6 \? ?
????--make-bed \????????
????--out clean
???需要注意的是,imputation 置信度較低的變異位點(diǎn)必須在 VCF 階段基于 imputation quality(R2 ≥ 0.8)進(jìn)行過濾,該步驟不包含在上述 PLINK 命令中。
3. 統(tǒng)計(jì)分析
3.1 連鎖不平衡(LD)分析
應(yīng)用場(chǎng)景:當(dāng)已經(jīng)識(shí)別出一組?lead SNP?后,需要確定哪些周圍 SNP可能與 lead SNP 處于高度連鎖狀態(tài)。該命令基于1000 Genomes(hg38)參考基因型數(shù)據(jù),以指定的 lead SNP 為中心,在每個(gè) lead SNP 上下游 ±1 Mb 的窗口內(nèi)計(jì)算成對(duì) LD(以r2衡量),并篩選出與 lead SNP 高度連鎖(r2≥ 0.8)的變異位點(diǎn)。
plink \
????--bfile??1KG_PCA5_hg38?\
????--r2 \
????--ld-snp-list? ?lead_snp.txt? \
????--ld-window-kb? 1000? \
????--ld-window? 99999? \
????--ld-window-r2? 0.8? \
????--out? ?mydata
--bfile,指定用于 LD 計(jì)算的參考基因型數(shù)據(jù)集前綴(BED/BIM/FAM 格式),這里為 1000 Genomes Project 的 hg38 版本數(shù)據(jù)。
--r2,指定以r2作為 LD 指標(biāo),計(jì)算 SNP 之間的成對(duì)連鎖不平衡。
--ld-snp-list,提供待分析的目標(biāo) SNP 列表(通常為 GWAS 或 QTL 分析中識(shí)別的 lead SNP),每行一個(gè) SNP ID。PLINK 將以這些 SNP 作為中心計(jì)算 LD。
--ld-window-kb 1000,設(shè)置 LD 計(jì)算的基因組窗口大小,為每個(gè) lead SNP 上下游 ±1 Mb 的區(qū)域。
--ld-window 99999,允許在窗口內(nèi)最多包含 99,999 個(gè) SNP,避免因 SNP 數(shù)量限制而截?cái)?LD 計(jì)算(默認(rèn)值為 10)。
--ld-window-r2 0.8,僅輸出r2≥ 0.8 的 SNP 對(duì),用于篩選與 lead SNP 處于高度連鎖狀態(tài)的變異(默認(rèn)閾值為 0.2;若設(shè)為 0,則輸出所有 LD 結(jié)果)。
--out,指定輸出文件前綴,生成的 LD 結(jié)果將以該前綴命名。
3.2 計(jì)算Genotype PCs (gPCs)
??先進(jìn)行 LD pruning 的原因:通過去除高度連鎖的冗余位點(diǎn),僅保留彼此相對(duì)獨(dú)立的 SNP,使每個(gè)基因組區(qū)域?qū)?PCA 的貢獻(xiàn)更加均衡;若不進(jìn)行 LD pruning,PCA 往往會(huì)被局部強(qiáng) LD 區(qū)域主導(dǎo),導(dǎo)致主成分反映局部連鎖結(jié)構(gòu)而非真實(shí)的整體群體結(jié)構(gòu)。
# Step1.?LD pruning (在 QC 后數(shù)據(jù)上挑“相對(duì)獨(dú)立 SNP”)
plink \
????--bfile clean \
????--indep-pairwise 50 5 0.2 \
????--out prune
參數(shù)解析:
--bfile clean,輸入 QC 后的 PLINK 二進(jìn)制數(shù)據(jù)集:clean.bed / clean.bim / clean.fam
--indep-pairwise 50 5 0.2,進(jìn)行 LD pruning(去除高度連鎖的冗余 SNP),輸出一組相對(duì)獨(dú)立的 SNP
????50:窗口大?。╳indow size),單位是SNP 數(shù)(一個(gè)窗口包含 50 個(gè) SNP)
????5:步長(zhǎng)(step),每次窗口向前滑動(dòng)5 個(gè) SNP
????0.2:LD 閾值(r2 閾值)。在窗口內(nèi),如果某些 SNP 兩兩相關(guān)性r2 > 0.2,PLINK 會(huì)移除其中的冗余 SNP,只保留代表性位點(diǎn)
--indep-pairwise 閾值選擇方法:
跑完后看保留的 SNP 數(shù)量;如果還有幾千到幾萬(wàn)+,一般就夠穩(wěn)了;
如果只剩幾百~一兩千SNP:太少,PCA 容易不穩(wěn) ,可以把閾值放寬,例如:50 10 0.3。
輸出文件:
prune.in 保留下來(lái)的獨(dú)立 SNP 列表(后續(xù) PCA 要用它)
prune.out:被剔除的 SNP 列表
# Step2.?PCA? (用 pruned SNP 做計(jì)算 gPCs,作為協(xié)變量)
plink \????
????--bfile clean \????
????--extract prune.in \????
????--pca header tabs \????
????--out gpc
參數(shù)解析:
--pca header tabs,計(jì)算 genotype principal components
????header:在輸出文件中添加列名
????tabs:使用制表符(tab)分隔輸出結(jié)果
輸出文件:
gpc.eigenvec:每個(gè)個(gè)體(donor)的 PC1、PC2、…,在 single-cell 分析中,把 gPC 映射到細(xì)胞的 donor_id 上即可。
gpc.eigenval:每個(gè) PC 的特征值(解釋的方差大?。?/p>
3.3 基礎(chǔ)款 GWAS 分析
#?連續(xù)性狀(線性回歸)
plink --bfile data? --pheno pheno.txt? --covar covar.txt? --linear? --out gwas
# 二分類性狀(邏輯回歸)
plink --bfile data? --pheno pheno.txt? --covar covar.txt? --logistic? --out gwas
4.?SNP / 樣本提取與過濾
4.1 按染色體提取 SNP
plink --bfile data --chr 6? --make-bed --out chr6
4.2 按 SNP ID 列表提取 / 刪除
plink --bfile data --extract id_snp.txt --make-bed --out snp
plink --bfile data --exclude id_snp.txt --make-bed --out re
--extract, 提取SNP ID
--exclude, 刪除SNP ID
4.3 按染色體物理坐標(biāo)區(qū)間提取
plink --bfile mydata --chr 2 --from-kb 5000 --to-kb 10000??--make-bed? --out region_snps
或
plink --bfile mydata --chr 2 --from-bp 12345678? --to-bp 23456789? --make-bed? --out region_snps
4.4 樣本提取 / 刪除
plink --bfile a --keep id_sample.txt --make-bed --out kept
plink --bfile a --remove id_sample.txt --make-bed --out removed
--keep, 提取樣本ID
--remove,刪除樣本ID
5. 常用參數(shù)說(shuō)明
5.1 輸入文件格式:
--vcf,輸入文件為 VCF格式(?? 需寫完整文件名,不能只寫文件前綴;,支持.vcf 或 .vcf.gz)
--file,輸入文件格式為一般文本格式(.ped + .map)
--bfile,輸入文件格式為二進(jìn)制PLINK格式 (.bed + .bim + .fam)(?? 只需寫文件前綴)
5.2 輸出文件格式:
--out <prefix>,指定輸出文件前綴
--make-bed,指定輸出為PLINK二進(jìn)制格式 ?? 如果不加--make-bed,PLINK 不會(huì)生成 bed/bim/fam
--recode vcf,指定輸出為VCF文本格式
--recode 不帶子參數(shù)時(shí),默認(rèn)輸出 PED/MAP?文本格式(.ped + .map)
5.3 其他常用參數(shù)說(shuō)明:
--allow-extra-chr,允許輸入數(shù)據(jù)中包含非標(biāo)準(zhǔn)染色體編號(hào)或命名(如scaffold、contig、chrUn等)。當(dāng)染色體名稱不符合 PLINK 默認(rèn)規(guī)則時(shí)(常見于非人類物種或自定義參考基因組),該參數(shù)可避免程序報(bào)錯(cuò)。需要注意的是,該參數(shù)僅放寬格式限制,并不意味著這些染色體適合用于下游分析。
--chr-set 19,PLINK 默認(rèn)參考基因組?human(人類染色體集合);對(duì)于非人類物種,需顯式指定染色體集合以避免染色體編碼不匹配的問題。例如,小鼠具有 19 條常染色體。
--biallelic-only strict,僅保留嚴(yán)格意義上的雙等位基因變異,自動(dòng)刪除所有多等位位點(diǎn)(multiallelic variants)。該參數(shù)常用于 GWAS、PCA 和 LD 等分析,以保證模型假設(shè)和結(jié)果的穩(wěn)定性。