基于R语言poppr包的AMOVA结果解读:Phi值与显著性测试疑问
关于poppr包AMOVA结果的解析与疑问解答
我使用R语言的poppr包运行AMOVA(分子方差分析),实际数据集包含28个种群的280个样本,无亚种群结构。为模拟该场景,我基于poppr内置示例数据,仅以Pop_Subpop为分层单元运行AMOVA,代码及结果如下:
library(poppr) # 加载测试数据并查看 data(Aeut) Aeut # 分配种群和亚种群分层 strata(Aeut) <- other(Aeut)$population_hierarchy other(Aeut) <- other(Aeut)$population_hierarchy # 转换为genclone对象 agc <- as.genclone(Aeut) agc # 第一次AMOVA(含亚种群分层) amova.result <- poppr.amova(agc, ~Pop/Subpop) amova.result # 显著性检验 amova.test <- randtest(amova.result) amova.test # 第二次AMOVA(仅Pop_Subpop分层,模拟实际无亚群场景) amova.result <- poppr.amova(agc, ~Pop_Subpop) amova.result # 第二次显著性检验 amova.test <- randtest(amova.result) amova.test
疑问解答
1. Phi统计量的计算及Phi-samples-total的含义
Phi统计量本质是基于AMOVA方差组分的遗传分化系数,计算逻辑类似Fst:
- 公式:
Phi = (总方差 - 目标层级下方的方差组分) / 总方差 - 在第二次以
Pop_Subpop为分层的AMOVA中,Phi-samples-total = (总方差 - 样本内方差) / 总方差,代入数值为(10.612 - 3.411)/10.612 ≈ 0.678,和结果完全匹配。
这里的“Between samples”是poppr输出的命名习惯,实际对应你指定的分层单元(Pop_Subpop组,即不同种群),因此Phi-samples-total值0.678衡量的是种群间的遗传分化程度——意味着67.8%的遗传变异来自种群间差异,剩余32.2%来自种群内的样本间差异。
2. amova.test结果的对比逻辑
AMOVA的显著性检验通过置换样本的分组标签实现:随机打乱样本所属的种群分组,重复计算AMOVA的方差组分,最终比较观测到的方差组分与随机模拟结果的差异。
在第二次以Pop_Subpop为分层的检验中:
- 观测值是种群间的方差组分(7.201),p值0.01表示:随机置换分组后,得到如此大的种群间方差的概率仅为1%。
- 这说明种群间的遗传差异显著大于随机水平,即你的分组(种群)是具有真实遗传分化的,而非随机分组的结果。
额外建议
- 针对你的实际数据(无亚种群结构),无需使用
Pop_Subpop,直接指定种群分层(如~pop)即可,结果解读会更直观。 - 运行AMOVA前确认使用的遗传距离适配你的标记类型:比如显性标记(如AFLP)常用Jaccard距离,共显性标记(如SSR)常用Nei's标准遗传距离,poppr会根据标记类型自动选择,但也可通过
dist参数手动指定。
内容的提问来源于stack exchange,提问作者steve
相关产品推荐
相关产品推荐

