在自然群體(區別于強人工選擇)中,如果我們感興趣的數量性狀表現出與特定的地理環境變量有高度的關聯性,隨著環境變量的改變而變化,則這些環境變量往往反映了環境作用于個體表型的選擇性壓力,并最終反映在群體水平的遺傳統計量,進而可以探究連續環境變量梯度下不同的選擇壓力以及群體的適應模式。
單變量潛在因素線性混合模型(LFMM)可用于基因組中環境適應特征的篩選,可以理解為另一種類型的全基因組關聯分析(GWAS),通過鑒定與環境變量高度相關的SNP位點來研究環境適應的模式。LFMM可以檢測環境變量(或表型值)與等位基因頻率之間的顯著性關系,從而確定可能受氣候因子(或表型)影響的SNP位點,專注于整體環境的評估,而不是溫度、濕度、緯度等單一的變量。
基于C語言的LFMM1.5和R包LEA都是基于貝葉斯自舉方法實現潛在因子混合模型,最新的LFMM則是通過最小二乘估計來實現的,即R包lfmm。“lfmm”R包對于較大的數據量計算速度更快,有時比貝葉斯版本更準確,可運用于全基因組(genome-wide,GW),基因組-環境(genome-environment,GE),全表觀基因組(epigenome-wide,EW)的關聯分析中。
LFMM官網:http://membres-timc.imag.fr/Olivier.Francois/lfmm/index.htm
R包lfmm:https://bcm-uga.github.io/lfmm/index.html
說明書:http://membres-timc.imag.fr/Olivier.Francois/lfmm/files/manual.pdf
R包LEA:https://bioconductor.org/packages/release/bioc/html/LEA.html
0.安裝
lfmm的安裝需要devtools,沒有devtools的需要先安裝,已安裝的可忽略第一步。
> install.packages("devtools")
> devtools::install_github("bcm-uga/lfmm")
> library(lfmm)
1.數據文件
lfmm用到兩個數據文件,分別為分子數據(可以是SNP基因型、基因表達水平、標準甲基化數據等)和環境數據(表型值等),要注意兩個數據文件都只支持數值。
1.1分子數據
在說明書中提供了幾種基因型數據可以選擇,這里只介紹最方便的ped格式,plink直接將vcf轉出ped,無需手動修改數據,可以避免人工修改數據的錯誤,格式轉換詳細參考以下鏈接:
plink安裝及基礎用法 - 簡書 (jianshu.com)
隨后刪除ped文件的前六列,只保留基因型數據:
> Y<-read.table("branch.hic.id.ped")
> Y<-Y[,-c(1:6)]
1.2環境數據
環境數據中包含n行和D列,每一行為一個個體,每一列為一個環境,[2,3]即表示第二個個體在第三個環境下的表型值。這里要注意環境數據與基因型數據中的個體順序必須一致。
> X<-read.csv("phe.csv",header = F,stringsAsFactors = F)
> head(X)
V1 V2
1 68.33 78.83
2 55.33 66.40
3 71.20 83.17
4 55.83 64.33
5 76.50 85.17
2.參數估計
lfmm主要估計兩個參數,λ和K。
2.1 λ
λ是基因組膨脹因子(genomic inflation factor),用來量化總體膨脹程度和檢測結果過高的假陽性率,相當于一個平衡參數,在實際運行過程中,可以對擬合的LFMM可以進行λ的校正,獲得標準化P值。在說明書中,默認λ=1e-05。
2.2 K
K是潛在因素的數目,有三種方法可以估計:
a.可以通過祖先成分推斷的結果來確定,即使用STRUCTURE和Admixture等軟件估計出的祖先成分;
5. GWAS:群體結構——Admixture - 簡書 (jianshu.com)b.基于PCA方法選擇合理K值;
6. GWAS:主成分分析——GCTA - 簡書 (jianshu.com)c. 通過交叉驗證的方法,設定備選的K值列表和lambda值列表,通過lfmm_ridge_CV函數返回的prediction選擇合適的K值和lambda值,該方法需要較長的運算時間和較多的計算資源。
> errs <- lfmm_ridge_CV(Y = Y,
X = X,
n.fold.row = 5,
n.fold.col = 5,
lambdas = c(1e-10, 1,1e+10),
Ks = c(1,2,3,4,5,6))
=== params
lambda K
1 1e-10 1
=== params
lambda K
2 1 1
=== params
lambda K
3 1e+10 1
……
Y:分子數據(基因型)
X:環境數據(表型)
n.fold.row:行交叉驗證折疊數
n.fold.col:列交叉驗證折疊數
lambdas:備選λ的范圍值
Ks:回歸模型中潛在因素數目
這里要注意,準確的λ值并不是我們要關注的重點,要點是控制好潛在的混合效應,得到正確的P值,因此不用過于糾結。
3.LFMM泛嶺估計
3.1 lfmm_ridge()
lfmm_ridge()計算估計B、U、V,分別為SNP位點效應的大小、潛在變量得分矩陣和潛在變量加載矩陣:
> mod.lfmm <- lfmm_ridge(Y = Y,
+ X = X,
+ K = 3)
Y:分子數據(基因型)
X:環境數據(表型)
K:admixture/structure/PCA得到的潛在因素數目,示例數據中K=3
3.2 lfmm_test()
隨后使用擬合模型進行關聯測試
> pv <- lfmm_test(Y = Y,
X = X,
lfmm = mod.lfmm,
calibrate = "gif")
3.3 QQ圖與曼哈頓圖展示顯著性
> pvalues <- pv$calibrated.pvalue
> qqplot(rexp(length(pvalues), rate = log(10)),
-log10(pvalues), xlab = "Expected quantile",
pch = 19, cex = .4)
> abline(0,1)
引用轉載請注明出處,如有錯誤敬請指出。