群體結構分析三種常用方法 (上篇)

2021-02-21 universebiologygirl
寫在前面

在群體遺傳學和進化生物學相關的項目中,群體結構分析是最常見也是最初步的分析內容,可以幫助我們確認樣本分群是否符合預期以及檢測離群樣本。群體結構分析最常用的三種方法就是PCA、系統發生樹和祖先成分堆疊圖,下面我們將使用發表在Genome Rearch上的Gou et al,2014中的數據(60隻狗全基因組SNP)逐一講解,分為上下兩篇。

一、 PCA分析1. 簡單介紹PCA原理2. PCA實踐GCTA進行PCA分析EIGENSOFT進行PCA分析3. 繪製PCA散點圖小結參考文獻

一、 PCA分析1. 簡單介紹PCA原理

PCA (Principal Component Analysis) ,即主成分分析方法,是一種使用最廣泛的數據降維算法,通過正交變換將一組數量龐大且可能存在相關性的變量轉換為一組低維的線性不相關的變量。
對於一個全基因組測序樣本call出的SNP數目通常是百萬級甚至是千萬級別,比如本文所用數據為17M SNP,如果直接使用這些SNP位點作為指標對個體進行區分,就會由於信息過於冗雜而無法把握重點,並造成計算資源和時間的浪費。PCA分析的過程就是從千萬級別的SNP位點中提取關鍵信息,以便我們使用更少的變量就可以對樣本進行有效的刻畫和區分。

2. PCA實踐

在Gou et al, 2014文章中,作者使用GCTA進行PCA分析,在本文中,還會講解另外一種主流的PCA分析軟體--EIGENSOFT中的smartpca。

軟體下載連結:
GCTA
EIGENSOFT

GCTA進行PCA分析

首先準備GCTA中PCA模塊所需的輸入文件,GCTA可以直接讀取.bed , .bim , .fam文件,使用plink將vcf格式文件轉換成上述三種文件,同時進行簡單的過濾(--geno 0.05)。

#!/bin/bash

plink=/software/biosoft/software/plink/plink
time $plink --vcf 60_dog.merge.vcf --geno 0.05 --dog --make-bed --out 60_dog_geno0.05 && echo "---- vcf2bed done "

然後使用GCTA軟體,--make-grm 生成個體對之間的遺傳關係矩陣(genetic relationship matrix),並將GRM的下三角元素保存為二進位文件.grm.id , .grm.bin , .grm.N.bin。
這裡要強調一點,對於非人物種,要設定好染色體數目參數,--autosome-num。否則會因為不識別26以上的染色體編號而報錯。

gcta=/software/biosoft/software/gcta_1.92.1beta6/gcta64
time $gcta --bfile 60_dog_geno0.05 --make-grm --autosome-num 38 --out 60_dog_geno0.05 && echo "----make-grm done----"

最後就是要進行PCA分析
使用 --pca 設置要生成主成分的數目,這裡設置為4,一般來說就可以刻畫出群體結構。
這一步會生成 .eigenval 和 .eigenvec 兩個文件。.eigenval文件為各主成分可解釋遺傳信息的比例,.eigenvec文件為每個樣本在top4主成分上的分解值。

time $gcta --grm 60_dog_geno0.05 --pca 4 --out 60_dog_geno0.05 && echo "----gcta-pca done----"

補充樣本所屬子群信息
在生成的.eigenvec文件中,並沒有包含樣本所屬子群信息,在進行可視化之前,需要添加上樣本群體信息。樣本較少時可以手動添加,樣本數目較多時推薦寫代碼完成,避免錯誤。文章Gou et al,2014中根據採樣地點劃分子群。添加上子群信息後,.eigenvec長這個樣子。

EIGENSOFT進行PCA分析

使用plink將vcf格式文件轉換成.bed , .bim , .fam文件,步驟同上,這裡不再贅述。

smartpca需要提供三種輸入文件,文件1記錄每個樣本在每個SNP位點的信息,文件2記錄每個SNP位點的信息,文件3記錄每個樣本的性別和所屬子群信息。
熟悉plink格式的同學應該知道.bed文件儲存的就是genotype信息,.bim文件存儲的就是SNP位點信息,那麼我們只需要自己生成文件3就可以了。文件3格式如下,第一列為樣本ID,第二列為性別(M,F,U),第三列為所屬子群。

接下來把所有參數寫入一個文件中,就可以運行smartpca了,其中 numoutevec 是輸出主成分的數目。

運行smartpca,生成 .evec 和 .eval 文件。

time /software/biosoft/software/EIG-6.1.4/bin/smartpca -p PCA.par > smartpca.log && echo "----smartpca----done"

截圖來看下 .evec 文件,兩種軟體運行結果差不多。

3. 繪製PCA散點圖

通過得到的.evec和eval兩個文件,這裡使用python完成可視化,代碼如下:

import matplotlib.pyplot as plt
import collections
import re

hash = collections.OrderedDict()
eval_file = open("60_dog_geno0.05.eigenval","r")
evec_file = open("60_dog_geno0.05.eigenvec","r")

###  從.eval文件中讀取top4主成分
eval_1 = eval_file.readline()
eval_2 = eval_file.readline()
eval_3 = eval_file.readline()
eval_4 = eval_file.readline()


###  從.evec文件中讀取在pc上的值
for i in evec_file:
    if re.match(r'#',i.strip()):
        continue
    tmp = i.strip().split()[1:]
    if tmp[-1] in hash.keys():
        hash[tmp[-1]]['1st'].append(eval(tmp[1]))
        hash[tmp[-1]]['2nd'].append(eval(tmp[2]))
        hash[tmp[-1]]['3rd'].append(eval(tmp[3]))
        hash[tmp[-1]]['4th'].append(eval(tmp[4]))
    else:
        hash[tmp[-1]] = hash.get(tmp[-1],collections.OrderedDict())
        hash[tmp[-1]]['1st'] = hash[tmp[-1]].get('1st',[])
        hash[tmp[-1]]['2nd'] = hash[tmp[-1]].get('2nd',[])
        hash[tmp[-1]]['3rd'] = hash[tmp[-1]].get('3rd',[])
        hash[tmp[-1]]['4th'] = hash[tmp[-1]].get('4th',[])
        hash[tmp[-1]]['1st'].append(eval(tmp[1]))
        hash[tmp[-1]]['2nd'].append(eval(tmp[2]))
        hash[tmp[-1]]['3rd'].append(eval(tmp[3]))
        hash[tmp[-1]]['4th'].append(eval(tmp[4]))

### 繪製散點圖,這裡只繪製pc1和pc2,其他pc可按照下面代碼逐一畫出。
fig = plt.figure(figsize=(20,10))
ax = fig.add_subplot(1, 1, 1)            ### 2D figure
#ax = fig.add_subplot(111,projection='3d')              ### 3D figure
mark = ['o','v','s','*','x','+']*10         ### 設置散點性狀
col = ['b','g','y','r','c']*10               ### 設置散點顏色
for m,n in enumerate(hash.keys()):    ### 逐點畫出
    ax.scatter(hash[n]['1st'],hash[n]['2nd'],c=col[m],s=75,marker=mark[m],label=n,alpha=0.7)
ax.legend(loc='best',scatterpoints=1,fontsize='12',framealpha=0)
ax.set_xlabel('Eigenvector1 ({}%)'.format(float('%.2f' % eval(eval_1))),fontsize=13,fontweight='bold')
ax.set_ylabel('Eigenvector2 ({}%)'.format(float('%.2f' % eval(eval_2))),fontsize=13,fontweight='bold')

#### 保存圖片
save_FileName = '60dog_geno0.05_gcta_pc1_pc2.png'
plt.savefig(save_FileName,dpi=400,bbox_inches='tight')

PCA散點圖如下

小結

PCA運用方差分解,將海量SNP的差異反映在二維坐標圖上,坐標軸軸取對樣品差異性解釋度最高的兩個或三個特徵值,樣本SNP位點信息越相似,反映在PCA圖中的距離越近。PCA可以幫助我們清楚掌握手上樣本的群體結構,並有效檢測出離群樣本,為下遊分析減少不必要的麻煩,同時,實現PCA分析的方法很多,PCA結果圖也簡單易懂,稱得上是低調實力派。
最後強調一點,PCA分析是降維,不是聚類,希望大家不要搞混了。
對PCA理論和分析過程感興趣的同學,可以進一步看下這篇文章。

謝謝大家賞臉看到這裡,在本篇文章中,主要學習了PCA分析的基本過程,在下篇文章中,我們將接著學習系統發生樹構建和祖先成分分析,精彩不容錯過,請持續關注我們!

參考文獻

Genome Res. 2014 Aug;24(8):1308-15. doi: 10.1101/gr.171876.113. Epub 2014 Apr 10.

http://blog.csdn.net/zhongkelee/article/details/44064401

相關焦點

  • 問卷調查常用的SPSS數據分析方法(上篇)
    ,愛馬君將結合實例詳細講解問卷數據常用的SPSS統計分析方法,並初步介紹分析時的SPSS軟體操作步驟,以便各位同學能夠在理解分析方法的同時加以運用。一般適用於單選題、多選題、排序題的分析。如樣本背景信息題目(性別、年齡、職業、收入等)多採用頻數分析方法進行分析。具體操作方法可參考《SPSS科研統計:頻數分析》,多選題頻數分析可參考《多重相應分析:問卷調查中多選題的分析方法》。 2.描述性統計分析。
  • 房屋抗震加固常用的三種方法
    不管在對老樓進行抗震加固,還是對其他建築物抗震加固,都需要採用合適的抗震加固方法。下面加固之家就給大家介紹一下房屋抗震加固常用的三種方法。根據不完全統計,全世界大大小小的地震可以達到的幾百萬次,每年全球都有上百起級別較高的地震,並且地震目前為止還是一個無法預知的狀態,可其傷害可是有眼可見的,儘管說我國大部分的土地沒有在地震帶上,可近幾年確實在我國的各地都有地震發生,對於這種情況,及時的進行房屋抗震加固是很重要的,常用的三種抗震加固方法你知道嗎?
  • 關聯分析和連鎖分析 | 群體遺傳專題
    常用的基於連鎖分析定位方法是利用雙親本雜交(回交)材料所構建的遺傳分離群體進行的。定位及效應估計的精確性和完整性在很大程度上依賴於定位的統計模型和方法。QTL定位方法主要有單標記分析法(老古董)、區間作圖法(F1群體中較常用)、複合區間作圖法(非cp類群體中常用)、完備區間作圖法等。
  • 蛋白質結構分析系列(一)
    一方面是因為之前做的一個課題需要一點點蛋白質結構分析相關的知識和分析技術,另一方面是轉博後忙了三個課題一直沒空寫。上篇推文說要寫這個專題,我一定會把它寫完。寫這個專題之前我先說明,自己並不是結構生物學相關研究領域的,只是因為自己曾經做的一個課題需要這個領域的一點點皮毛知識和技術。在那段時間我發現相比於組學(基因組/轉錄組/單細胞/等等),甚至是進化,蛋白質結構相關的教程是非常非常少。
  • 常用的三種3PE防腐鋼管連接方法
    3PE防腐鋼管是國內常用的一種防腐管道,指的是3層結構聚乙烯塗層(MAPEC)外防腐鋼管,第一層環氧粉末(FBE>100um),第二層膠粘劑(共聚膠)170~250um,第三層聚乙烯(PE)2.5~3.7mm,這三種材料緊密結合在一起,並與鋼管牢固結合形成優良的防腐層,從而大大改善了各自的性能
  • 論文常用數據分析方法分類總結-2
    上篇文章我們總結了基本描述統計、信度分析、效度分析、差異關係、影響關係五種常見分析方法,下面繼續我們的總結。6. 相關分析匯總相關分析用於研究X和Y的關係情況,X、Y都為定量數據。如果兩個變量是配對數據,比如對一個群體用同一個工具前後測量了兩次,可用配對T檢驗。10. 方差分析匯總方差分析用於分析定類數據與定量數據之間的關係情況,可分析兩組或兩組以上的變量差異。
  • 美股估值的三種常用方法 一看就懂
    對美股估值的方法也有很多種,依據投資者預期回報、企業盈利能力或企業資產價值等不同角度出發,比較常用的有以下三種方法。市盈率(PE)估值法 市盈率 = 股價/每股收益市盈率計算起來非常簡單,獲得相關數據也非常容易,可以用各類經濟報紙上發布的歷史市盈率(靜態市盈率)來計算。
  • 外匯交易常用的分析手法(上篇)
    如果預測匯價將上升就應買進,而預測下跌就應賣出,如果預測錯誤,則交易的損失就在所難免了關於預測匯率的走勢的方法,歷來就有兩派之爭,即基礎分析派(基本面)和技術分析派(技術面)。技術分析方法就是指根據外匯交易市場匯率走勢的過去表現,藉助技術分析工具預測匯率的未來趨勢並確定入市出市的策略的預測分析方法。它是以預測市場價格變化的未來趨勢為目的,以市場行為(外匯市場的價格和交易量)的圖形、圖表、形態、指標為手段,使用數學、統計學、價格學等理論對市場行為所進行的分析研究。
  • 只需這三種方法,你就能輕鬆分析和解決問題
    日常工作、生活和學習中,你採取哪些問題分析方法?有無套路可循呢?通常我們一般情況都是採取直接性分析方式,粗暴簡單,但問題分析並不到位。下面介紹三種問題分析方法,理清我們的思緒,在解決問題中,會起到事倍功半的效果。
  • 數據分析的幾種常用方法概覽
    數據分析常用方法概覽(之一)對數據進行分析的方法很多,常用的有對比分析法、分組分析法、結構分析法、交叉分析法、漏鬥圖分析法、矩陣分析法、綜合評價分析法、5W1H分析法、相關分析法、回歸分析法、 聚類分析法、判別分析法、主成分分析法、因子分析法
  • 群體遺傳中的主成分分析及其解讀
    主成分分析是群體遺傳學中常用的分析手段,一般用來 1)分析群體中存在的群體結構(分層); 2) 推斷群體歷史; 3) 關聯分析中對群體結構進行校正
  • 測試乾貨 | 電鏡測試中常用的元素分析方法
    元素分析在電鏡分析中經常使用,隨著科學技術的發展,現代分析型電鏡通過安裝 X射線能譜、能量過濾器、高角度環形探測器等配件, 逐步實現了在多學科領域、 納米尺度下對樣品進行多種信號的測試,從而可以獲得更全面的結構以及成分信息。以下是幾種現在常用的電鏡中分析元素的方法。
  • 雅思閱讀的三種文章結構分析
    ://chuguo.taobao.com  雅思閱讀對我們提出了很多的要求,其中最為烤鴨們熟知的莫過於幾點基礎能力的要求,如詞彙量的硬性要求,單句的理解和分析長句結構的能力,尋找特定信息的能力(scanning)以及段落的概括能力。
  • 數據分析方法:結構分析法
    編輯導語:我們在日常工作中,經常會收集很多數據,比如周報、月報等等,但是真正要用的時候卻還是重新取數;因為我們只有數據,沒有方法,比如我們可以用結構分析法來讀出數據的含義;本文作者分享了關於數據分析方法中的結構分析法,我們一起來看一下。你是不是覺得,平時做的日、周、月、季、年報沒啥用?
  • 產業規劃常用的理論方法
    產業規劃工作重點是研究市場需求與競爭,從經濟學理論方法角度深化對微觀環境的理解與認識,這是產業規劃獲得成功的關鍵因素。以下對如何運用產業生命周期、競爭結構、市場結構、市場需求、產業內戰略群體理論方法進行產業分析,作一簡要介紹。
  • 論文常用數據分析方法分類總結-4
    論文常用數據分析方法分類總結-2論文常用數據分析方法分類總結-316.如需分析多個X對多個Y的影響關係,以及具體哪些X對哪些Y有影響如何影響,可使用路徑分析。還有一種方法稱為結構方程模型,包含測量模型和結構模型。如果需要測量模型和結構模型,可使用結構方程模型。17.
  • 名師:英語句子結構分析方法
    下面就來介紹句子的基本結構以及讀懂句子的快捷方法。  英語句子分為簡單句和複合句。所謂的簡單句,就是一個句子中只包含一個主謂結構的句子。複合句又分成並列句和複雜句,下面我們分別對這三種情況加以簡要的分析。  1、簡單句  簡單句,即只有一個主謂結構的句子。
  • 9種常用數據分析方法
    數據聚類是對於靜態數據分析的一門技術,在許多領域受到廣泛應用,包括機器學習,數據挖掘,模式識別,圖像分析以及生物信息。4. 相似匹配相似匹配是通過一定的方法,來計算兩個數據的相似程度,相似程度通常會用一個是百分比來衡量。
  • 晶片失效分析常用方法及解決方案
    失效分析主要步驟和內容晶片開封:去除IC封膠,同時保持晶片功能的完整無損,保持 die,bond pads,bond wires乃至lead-frame不受損傷,為下一步晶片失效分析實驗做準備。SEM 掃描電鏡/EDX成分分析:包括材料結構分析/缺陷觀察、元素組成常規微區分析、精確測量元器件尺寸等等。
  • 楷書偏旁20|田英章屍字偏旁字的書寫布局方法分析
    因書法學習打基礎需要,筆者用了一長段時間分析了書法基本功夫、基本技能。對於楷書而言,不論是傳統速寫楷書也好,還是現在流行的工筆楷書也好,結構是公共的基本技能與基本經驗。工筆楷書還必須有精確的筆法支持才能展現工筆楷書的精巧細緻。