r - 为什么 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
?
解决方案
正如@user2554330 提到的,我们使用数据排列来测试测试统计量。排列是伪随机的,由permute包中的函数生成。如果您想获得可重复的 p 值,请使用set.seed()
;设置随机数生成器的种子。例如
set.seed(42)
adonis(....)
set.seed(42)
adonis(....)
将产生相同的排列集,因此产生相同的 p 值。
排列 p 值的准确性会随着排列数量的增加而增加;如果您尝试在不设置 RNG 种子但使用 的情况下运行示例permutations = 10000
,您应该会看到更少的变化。
推荐阅读
- python - ValueError: Tensor("ExponentialDecay_4:0", shape=(), dtype=float32)
- oracle - V$SQLAREA 表包含 SQL_FULLTEXT,如何在 SQL_FULLTEXT 中找到 SQL 的来源
- javascript - 旋转后如何使脸部正常?
- html - 为什么 CSS flexbox 不能与媒体查询一起使用?
- java - 如何从 ArrayList<> 读取到 ArrayList<> 并将其打印到终端?
- html - 响应式两列社交媒体提要 flexbox
- javascript - 如何在html中附加javascript内容
- nlp - 是否可以在 Rasa Chatbot 中添加日期选择器?
- c# - 将 Angular 应用程序上传到 IIS
- php - 访问 CSS 文件中的 PHP 变量