

ade4中的內建資料集humDNAm,提供了10種人群中線粒體DNA限制性位點的單倍型頻率。(https://rdrr.io/cran/ade4/man/humDNAm.html)
humDNAm 是3組資料的列表:
distances,56個單倍型的距離(距離矩陣,歐式距離屬性),透過計算每兩個單倍型之間限制性位點的差異數獲得的;
samples,10種人群中56個單倍型的丰度;
structures,10種人群所處的地區名稱。
library(ade4)
data(humDNAm)
names(humDNAm)
as.matrix(humDNAm$distance)[1:6,1:6]
head(humDNAm$samples)
head(humDNAm$structures)

ade4包中執行AMOVA的函式為amova()。
#初步計算,詳情 ?amova
#注:amova() 中輸入的距離矩陣必須為歐氏距離屬性,否則會報錯
amovahum <- amova(samples = humDNAm$samples, distances = sqrt(humDNAm$distances), structures = humDNAm$structures)
amovahum
result中,分別顯示每個分層的Df(自由度)、Sum Sq(總方差,即離差平方和)、Mean Sq (均方差,即SS/df)等統計指標。
componentsofcovariance中,顯示了在每個分層中檢測到的變異。Sigma代表了每個層次結構級別的方差,%代表了方差佔比。
statphi中,Phi表徵了人群分化的程度,值越高越明顯。

如果對其中某些內容感興趣,可以提取輸出。
#例如
amovahum$result
amovahum$componentsofcovariance
amovahum$statphi
write.table(amovahum$componentsofcovariance, 'componentsofcovariance.txt', sep = '\t', col.names = NA, quote = FALSE)
由於初始結果中未進行精確的檢驗,因此我們無法得知差異水平的顯著性。randtest()提供了基於置換的方法用於測試。
#這裡隨機置換 99 次為例,詳情 ?randtest
randtesthum <- randtest(amovahum, nrepet = 99)
randtesthum
plot(randtesthum)
人群分化程度的顯著性檢驗顯示,存在顯著的人群結構。(如果不顯著,p值大於0.05)

同時在三個直方圖中,直方圖代表隨機分佈,黑線代表實際觀測的資料,由圖可知,存在顯著的人群結構。(如果不顯著,則黑線將與直方圖區域存在較大的重疊)

如果對其中某些內容感興趣,可以提取輸出。
#例如
summary(randtesthum)
randtesthum$expvar
randtesthum$adj.pvalue
randtesthum$plot
上述提到,amova()中輸入的距離矩陣必須為歐氏距離屬性,否則會報錯。
但不幸的是,許多遺傳距離測度並不總是歐氏幾何性質的。如果有必要用到其它型別的距離測度,則需要在使用時作個轉化,例如常見的平方根轉化等。

之後將轉化後的距離用作amova()的輸入,就可以了。



