首页 > 解决方案 > 为什么 vegan 的 adonis() 每次都返回不同的 p 值?

问题描述

vegan 包中的函数 adonis 执行非参数 MANOVA,也称为 PERMANOVA。问题(也不是,也许我只是不完全理解测试是如何工作的)是每次我使用相同的数据运行它时,我得到的 p 值略有不同。

这是一个示例数据。

dframetest <- data.frame(X = rnorm(20), Y = rnorm(20), Z = rnorm(20), Label = c(rep("A",10),rep("B",10)))

adonis(dframetest[,1:3] ~ Label, permutations = 1000, data = dframetest, method = "euclidean")

如果您运行adonis几次,您会发现 p 值几乎总是略有不同,尽管看起来可能有大约 3-4 个值。这让我想知道如果你的数据处于重要的“边缘”,会发生什么。0.053如果返回的值类似于, 0.047, ,您将如何解释结果0.05

标签: rp-valuevegan

解决方案


正如@user2554330 提到的,我们使用数据排列来测试测试统计量。排列是伪随机的,由permute包中的函数生成。如果您想获得可重复的 p 值,请使用set.seed();设置随机数生成器的种子。例如

set.seed(42)
adonis(....)
set.seed(42)
adonis(....)

将产生相同的排列集,因此产生相同的 p 值。

排列 p 值的准确性会随着排列数量的增加而增加;如果您尝试在设置 RNG 种子但使用 的情况下运行示例permutations = 10000,您应该会看到更少的变化。


推荐阅读