R包ade4的AMOVA分析
示例数据集
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方法
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 次为例,详情 ?randtestrandtesthum <- randtest(amovahum, nrepet = 99)
randtesthum
plot(randtesthum)
人群分化程度的显著性检验显示,存在显著的人群结构。(如果不显著,p值大于0.05)
同时在三个直方图中,直方图代表随机分布,黑线代表实际观测的数据,由图可知,存在显著的人群结构。(如果不显著,则黑线将与直方图区域存在较大的重叠)
如果对其中某些内容感兴趣,可以提取输出。
#例如summary(randtesthum)
randtesthum$expvar
randtesthum$adj.pvalue
randtesthum$plot
对于非欧式距离的输入
上述提到,amova()中输入的距离矩阵必须为欧氏距离属性,否则会报错。
但不幸的是,许多遗传距离测度并不总是欧氏几何性质的。如果有必要用到其它类型的距离测度,则需要在使用时作个转化,例如常见的平方根转化等。
之后将转化后的距离用作amova()的输入,就可以了。