繁体   English   中英

为什么纯素食主义者的adonis()每次都会返回不同的p值?

[英]Why does adonis() from vegan returns a different p-value every time it is?

素食主义者软件包中的函数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.0530.0470.05

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

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

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

排列p值的准确性将随着排列数目的增加而增加; 如果尝试运行示例而不设置RNG种子,但permutations = 10000 ,则应看到较少的变化。

adonis通过随机选择排列进行排列测试。 您要求提供1000个随机排列,因此p值基于这1000个随机排列中观察到的测试统计量的等级。 (使用默认permutations = 999 ,您可以更容易地解释数字;然后p=0.264意味着随机数包括在内时,您所观察到的统计信息从顶部起第264位。)

如果3次运行的返回值分别为0.053、0.047、0.05,那么您将知道真实的p值(通过枚举每个可能的排列获得)约为0.05。 但是,即使您知道真实的p值是0.049对0.051,结论也应该大致相同。 有证据表明,对于纯粹的随机数据,与预测变量无关,这种影响足够大,以至于偶然发生的概率只有20分之一左右。

抱歉,我在这里下了话题。 如果要询问对p值的解释,则可能应该使用交叉验证,而不是堆栈溢出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM