我尝试理解PERMANOVA
群组中的multivariate spread
假设与univariate ANOVA
中的方差同质性相似,为此我制作了R代码,但我没有找到这个结果,为什么?
我的代码:
library(vegan)
# Four similar populations:
spdf <- matrix(NA, 60, 4, dimnames =
list(1:60, c("sp1", "sp2", "sp3", "sp4")))
spdf <- as.data.frame(spdf)
eff <- sort(rep(1:6, 10))
spdf$sp1 = eff + rnorm(60, 0, 0.25)
spdf$sp2 = eff + rnorm(60, 0, 0.25)
spdf$sp3 = eff + rnorm(60, 0, 0.25)
spdf$sp4 = eff + rnorm(60, 0, 0.25)
#3 Treatment
treat <- gl(3, 20, labels = paste("t", 1:3, sep=""))
# distance matrix
envdist <- vegdist(spdf, method="euclidean")
# when computing beta-dispersion in anova we have no group differences
# but in adonis is different
anova(betadisper(envdist, treat))
adonis(spdf~treat)
答案 0 :(得分:5)
你似乎在这里混淆了很多东西。 PERMANOVA是一种多变量ANOVA,具有基于排列的测试。 PERMANOVA测试组质心之间的差异 - 换句话说,它比较了多变量均值。它确实假设方差的同质性。为了检查组之间在质心方面的差异是否由方差的差异引起,我们可能会使用在betadisper()
中adonis()
和betadisper()
中实现的多变量分散方法。做不同的事情:
adonis()
提供了像PERMANOVA,betadisper()
分析了多变量传播。我们可以得出的结论是,这两种方法正确地检测出均值的差异(adonis()
显示了显着的treat
效果)
> adonis(spdf~treat)
Call:
adonis(formula = spdf ~ treat)
Permutation: free
Number of permutations: 999
Terms added sequentially (first to last)
Df SumsOfSqs MeanSqs F.Model R2 Pr(>F)
treat 2 3.5326 1.76628 113.66 0.79952 0.001 ***
Residuals 57 0.8858 0.01554 0.20048
Total 59 4.4184 1.00000
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
且betadisper()
正确(所有组具有相同的分散)都不能拒绝均相多变量分散的零假设
> anova(betadisper(envdist, treat))
Analysis of Variance Table
Response: Distances
Df Sum Sq Mean Sq F value Pr(>F)
Groups 2 0.1521 0.076041 1.1099 0.3366
Residuals 57 3.9050 0.068509
这完全符合您模拟数据的方式。