基因組選擇中如何清洗基因組數據

打油詩

題目:plink666

不用不知道

一用忘不掉

朝思暮也想

真的好奇妙

1. 背景

一個朋友之前問過這個問題,問題可以分爲:

  • 基因組選擇中如何將ATCG的數據轉化爲012的形式
  • 如何進行基因組數據的過濾篩選
  • 有沒有示例代碼可以演示

今天我將用一份模擬的芯片下機數據,演示一下如何進行基因組數據的篩選。

2. 數據篩選的幾個標準

  • 1,去除缺失率大於10%的SNP位點

這句話的意思是,比如有50K個SNP位點,有1000個體,如果某一個SNP位點在1000個體中,缺失率達到10%以上,即有超過100的個體在這個SNP位點上沒有分型結果,就把這個位點刪除。因爲缺失率大的SNP,後期填充準確性不高。

    1. 樣本檢出率大於90%

這裏的樣本檢出率,比如共有50K的芯片,需要個體的芯片分型數要大於45K,否則去掉該樣本

  • 3,最小等位基因頻率(MAF)大於1%

我們在進行基因組選擇(SSGBLUP)時,需要構建G矩陣和H矩陣,構建G矩陣是利用SNP的分型信息。構建好的G矩陣描述的是個體間的關係,如果一個位點在999個個體上都爲A,在1個個體上爲G,即MAF爲0.1%,這種SNP位點在計算中意義不大,去掉可以節約計算資源。

    1. 去除哈迪溫伯格平衡檢驗(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.

image

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表示.

image

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形式的文件

image

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矩陣構建和後續分析

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章