GWAS學(xué)習(xí)筆記(一):質(zhì)量控制(QC)

本系列文章采用的數(shù)據(jù)集與代碼來自https://github.com/MareesAT/GWA_tutorial
該教程獲得了許多人的推薦,是一份很詳細(xì)的step-by-step guide。

本文將介紹該教程中的QC部分(1_QC_GWAS.zip),后續(xù)或?qū)⒗^續(xù)添加有關(guān)QC的其他細(xì)節(jié)。

準(zhǔn)備

首先,使用下述命令即可將該Github項(xiàng)目下載到本地:

git clone https://github.com/MareesAT/GWA_tutorial.git

下載后,將文件1_QC_GWAS.zip解壓縮即可得到該部分的教程文件與數(shù)據(jù)。

1_QC_GWAS.zip解壓縮后得到的文件

其中,教程文件為1_Main_script_QC_GWAS.txt

由于本教程還需使用plink軟件,plink 1.9版本的下載頁面見https://www.cog-genomics.org/plink2/。只需在頁面選擇對(duì)應(yīng)系統(tǒng)版本的二進(jìn)制軟件壓縮包下載,解壓后即可直接使用。

此外,環(huán)境中還應(yīng)裝有R語言。

數(shù)據(jù)簡(jiǎn)介

該Github教程使用了可免費(fèi)獲取的HapMap數(shù)據(jù):hapmap3_r3_b36_fwd.consensus.qc。編寫者模擬了一組二進(jìn)制表型特征,并將其添加到該數(shù)據(jù)集中,并命名為HapMap_3_r3_1。未經(jīng)添加的原始HapMap數(shù)據(jù)可見http://hapmap.ncbi.nlm.nih.gov/downloads/genotypes/2010-05_phaseIII/plink_format/

典型的plink數(shù)據(jù)集包括三個(gè)文件:.bed文件、.bim文件和.fam文件

  • bed文件:二進(jìn)制文件,主要是存儲(chǔ)等位基因信息。它開頭前三個(gè)字節(jié)永遠(yuǎn)是0x6c, 0x1b, 和0x01,接下來就是V組N/4個(gè)字節(jié)的序列,這里V是指遺傳變異的個(gè)數(shù),N是指樣本數(shù),假如N無法被4整除,那么將N/4的結(jié)果取整后加1作為各組的字節(jié)數(shù),編碼信息如下:
    • 00:基因型是bim文件中allele 1的純合子
    • 01:基因型缺失
    • 10:基因型是雜合子
    • 11:基因型是bim文件中allele 2的純合子
  • bim文件:文本文件。包含染色體編號(hào)(默認(rèn)可用1-22、X、Y。可采用擴(kuò)展編號(hào))、SNP編號(hào)、位點(diǎn)的摩爾距離(可用0代表不知道)、物理位置、allele 1(常為次等位基因)、allele 2(常為主等位基因)。其中allele用0代表缺失。
  • fam文件:文本文件。包含F(xiàn)amily ID、Individual ID、Paternal ID(父本ID)、Maternal ID(母本ID)、Sex(雄性為1,雌性2,未知為0)、Phenotype。這里的Phenotype取值可為1(對(duì)照組)、2(實(shí)驗(yàn)組/病例)、-9/0(表示實(shí)驗(yàn)組/對(duì)照組表型缺失)。如果出現(xiàn)了 {-9, 0, 1, 2}之外的值,則表型會(huì)被讀取為數(shù)量性狀。

有公眾號(hào)文章(小麥穗粒數(shù)轉(zhuǎn)錄組分析(四)----使用plink進(jìn)行關(guān)聯(lián)分析 )指出,對(duì)于小麥,可將染色體改名為數(shù)字(如1A->1,1B->2類推)來適應(yīng)plink的染色體編號(hào)規(guī)則。

plink 1.9支持將染色體用字符表示。在由VCF格式向plink轉(zhuǎn)換時(shí),使用參數(shù)“--allow-extra-chr”即可正常轉(zhuǎn)換形如“chr1A”的染色體名稱。

該GitHub項(xiàng)目中提供的腳本可在簡(jiǎn)單修改后適用于其他數(shù)據(jù)集的研究。但由于腳本是針對(duì)二進(jìn)制表型(binary outcome measure)開發(fā)的,因此并不適用于數(shù)量性狀的研究(需要進(jìn)一步修改腳本)。

Note, most GWAS studies are performed on an ethnic homogenous population, in which population outliers are removed. The HapMap data, used for this tutorial, contains multiple distinct ethnic groups, which makes it problematic for analysis.
Therefore, we have selected only the EUR individuals of the complete HapMap sample for the tutorials 1-3. This selection is already performed in the HapMap_3_r3_1 file from our GitHub page.

有關(guān)質(zhì)量控制的進(jìn)一步細(xì)節(jié),可參見項(xiàng)目作者發(fā)表的文章A Tutorial on Conducting Genome-Wide Association Studies: Quality Control and Statistical Analysis

第1步:SNP缺失率過濾

計(jì)算數(shù)據(jù)集缺失率:

plink --bfile HapMap_3_r3_1 --missing

該步會(huì)輸出文件plink.imissplink.lmiss,分別包含每個(gè)樣本個(gè)體的SNP缺失率,和對(duì)每個(gè)SNP而言存在缺失的樣本數(shù)量的比例。

隨后,可用項(xiàng)目提供的R腳本繪制直方圖

Rscript --no-save hist_miss.R

隨后,可以按照閾值刪除缺失率過高的SNP位點(diǎn)和樣本個(gè)體:

# 刪除缺失率>0.2的SNP
plink --bfile HapMap_3_r3_1 --geno 0.2 --make-bed --out HapMap_3_r3_2

# 刪除缺失率>0.2的個(gè)體
plink --bfile HapMap_3_r3_2 --mind 0.2 --make-bed --out HapMap_3_r3_3

# 刪除缺失率>0.02的SNP
plink --bfile HapMap_3_r3_3 --geno 0.02 --make-bed --out HapMap_3_r3_4

# 刪除缺失率>0.02的個(gè)體
plink --bfile HapMap_3_r3_4 --mind 0.02 --make-bed --out HapMap_3_r3_5

在過濾環(huán)節(jié),項(xiàng)目作者指出,先從不嚴(yán)格的閾值開始過濾是個(gè)好習(xí)慣。

第2步:檢測(cè)、過濾性別差異

該步利用X染色體的近交(純合度)估計(jì),并依據(jù)先驗(yàn)確定的女性的受試者的F值必須<0.2、男性的受試者的F值必須> 0.8進(jìn)行檢測(cè)。

plink --bfile HapMap_3_r3_5 --check-sex 

Rscript --no-save gender_check.R

該步驟會(huì)生成文件plink.sexcheckplink.logplink.hh。在plink.sexcheck中記錄了每個(gè)樣本個(gè)體的狀態(tài)(STATUS)和F值等。其中,不滿足前述要求個(gè)體的狀態(tài)會(huì)被標(biāo)記為“PROBLEM”。

plink.sexcheck

作者提供的R腳本(gender_check.R)可以繪制所有樣本F值的分布情況,并分別給出了數(shù)據(jù)集中標(biāo)記為男性、女性的個(gè)體的F值分布。

數(shù)據(jù)集中全部樣本的F值分布

接下來,作者給出了兩種刪除異常個(gè)體的方法。此處介紹第一種。

#從plink.sexcheck中篩選帶有字符“PROBLEM”的行->篩選結(jié)果中提取第1、2列寫入sex_discrepancy.txt文件
grep "PROBLEM" plink.sexcheck| awk '{print$1,$2}'> sex_discrepancy.txt

#刪除樣本
#plink使用Family ID和Individual ID定位到特定個(gè)體
plink --bfile HapMap_3_r3_5 --remove sex_discrepancy.txt --make-bed --out HapMap_3_r3_6 

第3步:次等位基因頻率(MAF)過濾

該步驟將刪除MAF過低的SNP,即刪除變異過于罕見的位點(diǎn)。項(xiàng)目作者首先篩選出了位于22對(duì)常染色體上的SNP。

awk '{ if ($1 >= 1 && $1 <= 22) print $2 }' HapMap_3_r3_6.bim > snp_1_22.txt
plink --bfile HapMap_3_r3_6 --extract snp_1_22.txt --make-bed --out HapMap_3_r3_7

隨后用plink生成MAF分布數(shù)據(jù),并繪制成直方圖。

plink --bfile HapMap_3_r3_7 --freq --out MAF_check
Rscript --no-save MAF_check.R
MAF分布

最后,刪除MAF<0.05的位點(diǎn)。通常,GWAS項(xiàng)目采用的MAF閾值在0.01-0.05之間,取決于樣本大小。

plink --bfile HapMap_3_r3_7 --maf 0.05 --make-bed --out HapMap_3_r3_8

第4步:刪除不符合Hardy-Weinberg平衡的SNP

首先,檢查所有SNP的HWE p值分布

plink --bfile HapMap_3_r3_8 --hardy
HWE檢查結(jié)果

檢查結(jié)果中,每一列分別代表:

  • snp 所在染色體
  • snp 名稱
  • test的名稱
  • Minor allele code
  • Major allele code
  • 具體數(shù)據(jù) 也就是 AA Aa aa 的個(gè)數(shù)
  • 觀察到的2pq 的值
  • 期望的2pq的值
  • 對(duì)這個(gè)數(shù)據(jù)進(jìn)行卡方檢驗(yàn),看顯不顯著

選擇HWE p-value低于0.00001的SNP繪圖,以放大嚴(yán)重偏離的SNP

awk '{ if ($9 <0.00001) print $0 }' plink.hwe>plinkzoomhwe.hwe
Rscript --no-save hwe.R
HWE分布與放大之后的分布

HWE的過濾部分,作者分了兩步。首先是默認(rèn)參數(shù)的HWE過濾,plink僅會(huì)過濾對(duì)照組。添加參數(shù)“--hwe-all”后,plink將過濾全部樣本。

#默認(rèn)參數(shù),僅過濾對(duì)照組
plink --bfile HapMap_3_r3_8 --hwe 1e-6 --make-bed --out HapMap_hwe_filter_step1

#過濾全部樣本
plink --bfile HapMap_hwe_filter_step1 --hwe 1e-10 --hwe-all --make-bed --out HapMap_3_r3_9

更多理論背景可見項(xiàng)目作者的文章A Tutorial on Conducting Genome-Wide Association Studies: Quality Control and Statistical Analysis

第5步:控制雜合率偏差

本步驟將生成受試者雜合率分布圖,并刪除雜合率偏離均值超過3倍標(biāo)準(zhǔn)差的個(gè)體。

首先需要對(duì)不相關(guān)的SNP進(jìn)行雜合率檢查。項(xiàng)目作者提供了文件inversion.txt,其中記錄了在高LD區(qū)域中的SNP編號(hào)。檢查時(shí),排除了這些SNP,并使用參數(shù)--indep-pairwise來精簡(jiǎn)SNP。參數(shù)參數(shù)“ 50 5 0.2”分別代表:窗口大小,每步移動(dòng)窗口經(jīng)過的SNP數(shù)量(步長(zhǎng)),以及一個(gè)SNP在所有其他SNP上同時(shí)回歸的多重相關(guān)系數(shù)(multiple correlation coefficient for a SNP being regressed on all other SNPs simultaneously)(即r^2 threshold)。

plink --bfile HapMap_3_r3_9 --exclude inversion.txt --range --indep-pairwise 50 5 0.2 --out indepSNP

該命令生成兩個(gè)文件indepSNP.prune.inindepSNP.prune.outprune.in文件中包含的就是通過篩選條件的、獨(dú)立的SNP位點(diǎn),而prune.out則記錄具有LD的SNP位點(diǎn)。

plink --bfile HapMap_3_r3_9 --extract indepSNP.prune.in --het --out R_check

該命令將生成文件R_check.hetR_check.log。其中,“.het”文件格式見下表。

列名 含義
FID Family ID
IID Within-family ID
O(HOM) Observed number of homozygotes,實(shí)際觀測(cè)到的純合子數(shù)量
E(HOM) Expected number of homozygotes,預(yù)測(cè)的純合子數(shù)量
N(NM) Number of non-missing autosomal genotypes,常染色體上非缺失的基因型數(shù)量
F Method-of-moments F coefficient estimate,矩量法估計(jì)的近交系數(shù)F

下述腳本讀取了R_check.het文件,并繪制了雜合率分布圖

Rscript --no-save check_heterozygosity_rate.R
雜合率分布直方圖

項(xiàng)目作者提供了腳本heterozygosity_outliers_list.R以生成雜合率與平均值相差超過三倍標(biāo)準(zhǔn)差的樣本。結(jié)果保存為fail-het-qc.txt,并對(duì)該文件進(jìn)行處理,處理結(jié)果交由plink進(jìn)行刪除。

#提取雜合率與平均值相差超過三倍標(biāo)準(zhǔn)差的樣本所在行
Rscript --no-save heterozygosity_outliers_list.R

#去掉文件中的引號(hào)并提取前兩行,以匹配plink的格式
sed 's/"http:// g' fail-het-qc.txt | awk '{print$1, $2}'> het_fail_ind.txt

#plink根據(jù)提取結(jié)果刪除對(duì)應(yīng)樣本
plink --bfile HapMap_3_r3_9 --remove het_fail_ind.txt --make-bed --out HapMap_3_r3_10

第6步:清除隱含相關(guān)的個(gè)體

該步驟進(jìn)行樣本間的親緣關(guān)系估計(jì),并將清除未標(biāo)記明顯親子關(guān)系的個(gè)體親緣關(guān)系過近的個(gè)體。

下述命令將進(jìn)行樣本間親緣關(guān)系的估計(jì),生成pihat_min0.2.genomepihat_min0.2.log

plink --bfile HapMap_3_r3_10 --extract indepSNP.prune.in --genome --min 0.2 --out pihat_min0.2

“.genome”格式文件介紹如下表

列名 含義
FID1 First sample's family ID
IID1 First sample's within-family ID
FID2 Second sample's family ID
IID2 Second sample's within-family ID
RT Relationship type inferred from .fam/.ped file,從fam/ped文件推斷的樣本關(guān)系
EZ IBD sharing expected value, based on just .fam/.ped relationship
Z0 P(IBD=0)
Z1 P(IBD=1)
Z2 P(IBD=2)
PI_HAT Proportion IBD, i.e. P(IBD=2) + 0.5*P(IBD=1),IBD比例
PHE Pairwise phenotypic code (1, 0, -1 = case-case, case-ctrl, and ctrl-ctrl pairs, respectively)
DST IBS distance, i.e. (IBS2 + 0.5*IBS1) / (IBS0 + IBS1 + IBS2)
PPC IBS binomial test
RATIO HETHET : IBS0 SNP ratio (expected value 2)

IBD全稱Identity By Descent, 又叫做血緣同源,指的是兩個(gè)個(gè)體中共有的等位基因來源于共同祖先
IBS全稱Identity By State, 又叫做狀態(tài)同源,指的是兩個(gè)個(gè)體中共有的等位基因序列相同。
對(duì)于某個(gè)等位基因,IBS state只要求allel的個(gè)數(shù)相同即可,而IBD state則進(jìn)一步要求相同的allel來自于共同祖先。
此文章介紹了IBS與IBD的更多細(xì)節(jié):IBD血緣同源簡(jiǎn)介

其中,列RT的取值可為:

列名 含義
FS full siblings,全同胞,指有著相同父母的個(gè)體之間的關(guān)系
HS half siblings,半同胞,指同父異母或同母異父的個(gè)體之間的關(guān)系
PO parent-offspring,親子代關(guān)系
OT other,其他
UN 不相關(guān)的個(gè)體

已知HapMap包含親子關(guān)系,下述代碼將使用z值可視化這些親子關(guān)系。

#如果第8列即Z1>0.9,輸出該行
awk '{ if ($8 >0.9) print $0 }' pihat_min0.2.genome > zoom_pihat.genome

Rscript --no-save Relatedness.R
Pihat分布與樣本親子關(guān)系在z0和z1上的可視化

通常,應(yīng)使用基于特定家庭的方法來分析基于家庭的數(shù)據(jù)。在本教程中,出于說明目的,將無關(guān)樣本中的相關(guān)性視為隱含的相關(guān)性。

在本步驟中,我們旨在從數(shù)據(jù)集中刪除所有“關(guān)聯(lián)性”。為了證明大多數(shù)相關(guān)性是親子關(guān)系所致,我們將僅在founders(數(shù)據(jù)集中沒有父母的個(gè)人,家系創(chuàng)建人)中進(jìn)行pihat篩選。

#篩選出僅含founders的數(shù)據(jù)集
plink --bfile HapMap_3_r3_10 --filter-founders --make-bed --out HapMap_3_r3_11

#再次進(jìn)行親緣關(guān)系估計(jì)
plink --bfile HapMap_3_r3_11 --extract indepSNP.prune.in --genome --min 0.2 --out pihat_min0.2_in_founders

文件pihat_min0.2_in_founders.genome顯示,在排除所有非founders之后,HapMap數(shù)據(jù)中僅剩下1對(duì)pihat大于0.2的個(gè)體對(duì)。根據(jù)Z值,這可能是完整的同胞或DZ雙胞胎對(duì)。值得注意的是,他們?cè)贖apMap數(shù)據(jù)中沒有獲得相同的家庭身份(FID)。

對(duì)于每對(duì)pihat> 0.2的“相關(guān)”個(gè)體,項(xiàng)目作者建議刪除call rate最低的個(gè)體。

#對(duì)于篩選出的僅含founders的數(shù)據(jù)集,再次計(jì)算缺失率
plink --bfile HapMap_3_r3_11 --missing

在缺失率計(jì)算結(jié)果中,手動(dòng)找到“相關(guān)”個(gè)體對(duì)中缺失率更高的個(gè)體(在本例中,是13291 NA07045),并構(gòu)建文件0.2_low_call_rate_pihat.txt,在文件中輸入以下內(nèi)容:

13291  NA07045

保存文件,并用如下命令刪除對(duì)應(yīng)樣本。(如有多個(gè)“相關(guān)”對(duì),則尋找每對(duì)中缺失率更高的個(gè)體記錄在本文件中,每個(gè)個(gè)體占一行)

plink --bfile HapMap_3_r3_11 --remove 0.2_low_call_rate_pihat.txt --make-bed --out HapMap_3_r3_12

結(jié)語

以上就是該GWAS教程的質(zhì)控部分了。本部分生成的文件中,下述文件將在下一部分中繼續(xù)使用

  • The bfile HapMap_3_r3_12 (i.e., HapMap_3_r3_12.fam,HapMap_3_r3_12.bed, and HapMap_3_r3_12.bim)
  • indepSNP.prune.in
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。