打油詩
題目:plink666
不用不知道
一用忘不掉
朝思暮也想
真的好奇妙
1. 背景
一個朋友之前問過這個問題,問題可以分爲:
- 基因組選擇中如何將ATCG的數據轉化爲012的形式
- 如何進行基因組數據的過濾篩選
- 有沒有示例代碼可以演示
今天我將用一份模擬的芯片下機數據,演示一下如何進行基因組數據的篩選。
2. 數據篩選的幾個標準
- 1,去除缺失率大於10%的SNP位點
這句話的意思是,比如有50K個SNP位點,有1000個體,如果某一個SNP位點在1000個體中,缺失率達到10%以上,即有超過100的個體在這個SNP位點上沒有分型結果,就把這個位點刪除。因爲缺失率大的SNP,後期填充準確性不高。
-
- 樣本檢出率大於90%
這裏的樣本檢出率,比如共有50K的芯片,需要個體的芯片分型數要大於45K,否則去掉該樣本
- 3,最小等位基因頻率(MAF)大於1%
我們在進行基因組選擇(SSGBLUP)時,需要構建G矩陣和H矩陣,構建G矩陣是利用SNP的分型信息。構建好的G矩陣描述的是個體間的關係,如果一個位點在999個個體上都爲A,在1個個體上爲G,即MAF爲0.1%,這種SNP位點在計算中意義不大,去掉可以節約計算資源。
-
- 去除哈迪溫伯格平衡檢驗(HWE)P值小於10的-6次方的SNP
位點進行哈溫平衡檢驗時,去除P值小於10的-6次方的SNP
3. PLINK格式
3.1 map文件
格式說明鏈接: http://zzz.bwh.harvard.edu/plink/data.shtml#map
map格式的文件, 圖譜信息文件, 主要包括染色體名稱, SNP名稱,所在染色體的遺傳座標和物理座標.
map文件沒有行頭
map文件包括四列: 染色體, SNP名稱, SNP位置, 鹼基對座標
- 染色體編號爲數字, 未知爲0
- SNP名稱爲字符或數字, 如果不重要, 可以從1編號, 注意要和bed文件SNP列對應
- 染色體的摩爾位置(如果未知,可以用0表示)
- SNP物理座標
如果只有SNP名稱, 可以手動構建map文件, 第二列爲SNP名稱, 其它幾列如果未知,可以寫爲0.
3.2 ped文件
格式說明鏈接:http://zzz.bwh.harvard.edu/plink/data.shtml#ped
bed格式的文件, 主要包括SNP的信息, 包括個體ID, 系譜信息, 表型和SNP的分型信息.
數據沒有行頭, 空格或者tab隔開的文件
前六列必須有, 包括系譜信息, 表型信息
- 第一列: Family ID # 如果沒有, 可以用個體ID代替
- 第二列: Individual ID # 個體ID編號
- 第三列: Paternal ID # 父本編號
- 第四列: Maternal ID # 母本編號
- 第五列: Sex (1=male; 2=female; other=unknown) # 性別, 如果未知, 用0表示
- 第六列: Phenotype # 表型數據, 如果未知, 用0表示
- 第七列以後: 爲SNP分型數據, 可以是AT CG或11 12, 或者A T C G或1 1 2 2
前六列, 必須要有, 如果沒有相關數據, 用0表示.
4. PLINK過濾命令
4.1 缺失大於10%
--geno 0.1
4.2 樣本call rate大於90%
--mind 0.1
4.3 最小等位基因頻率大於0.01
--maf 0.01
4.4 哈溫平衡P值大於1e-6
--hwe 1e-6
4.5 輸出過濾後的012形式的文件
--recodeA
4.6 將過濾後的文件命名爲c
--out c
5. 測試數據
測試數據爲QMSim生成的模擬數據,經過處理之後生成b.map和b.ped文件,處理流程如下
5.1 預覽文件
(base) [dengfei@localhost test]$ ls
b.map b.ped
5.2 使用plink進行處理
plink --file b --chr-set 30 --geno 0.1 --mind 0.1 --maf 0.01 --hwe 1e-6 --recodeA --out c
5.3 處理結果日誌
PLINK v1.90b6.5 64-bit (13 Sep 2018) www.cog-genomics.org/plink/1.9/
(C) 2005-2018 Shaun Purcell, Christopher Chang GNU General Public License v3
Note: --recodeA flag deprecated. Use 'recode A ...'.
Logging to c.log.
Options in effect:
--chr-set 30
--file b
--geno 0.1
--hwe 1e-6
--maf 0.01
--mind 0.1
--out c
--recode A
63985 MB RAM detected; reserving 31992 MB for main workspace.
.ped scan complete (for binary autoconversion).
Performing single-pass .bed write (50000 variants, 1200 samples).
--file: c-temporary.bed + c-temporary.bim + c-temporary.fam written.
50000 variants loaded from .bim file.
1200 samples (0 males, 0 females, 1200 ambiguous) loaded from .fam.
Ambiguous sex IDs written to c.nosex .
0 samples removed due to missing genotype data (--mind).
Using 1 thread (no multithreaded calculations invoked).
Before main variant filters, 1200 founders and 0 nonfounders present.
Calculating allele frequencies... done.
0 variants removed due to missing genotype data (--geno).
--hwe: 2 variants removed due to Hardy-Weinberg exact test.
0 variants removed due to minor allele threshold(s)
(--maf/--max-maf/--mac/--max-mac).
49998 variants and 1200 samples pass filters and QC.
Note: No phenotypes present.
--recode A to c.raw ... done.
5.3 查看c.raw的012形式的文件
6. plink速度666
我最初是使用R語言進行編程轉化,花費很長時間,然後使用python和perl進行編程轉化,最後使用plink,plink不用不知道,一用忘不了,很方便。不同編程語言速度對比:
- R語言:2個小時
- Python: 20分鐘
- Perl:15分鐘
- plink:15秒
7. 如何重複上面的代碼
- 回覆公衆號:plink,獲得下載數據和代碼鏈接
- 安裝plink軟件
- 執行code.sh的命令
- 查看c.raw文件,轉化後的012形式
- 愉快的進行G矩陣構建和後續分析