素食主义者的阿多尼斯:变量的顺序或分层的使用

机器算法验证 r 置换检验 平方和 阻塞
2022-03-22 21:03:50

我正在使用包中的adonis()函数vegan来确定 1) 共同发生的宿主物种在多个地点的微生物群落中是否存在差异,以及 2) 地点是否不同。我检查了所有关于 CV 和 SO 的帖子,对于如何使用 adonis 函数确定多个因素的重要性没有明确的答案。

正如https://stackoverflow.com/questions/26768779/vegan-adonis-unbalanced-design-ss-type-ii-or-iii所建议的那样,我首先这样做了

其中 jacc 是使用 jaccard 度量的相异矩阵

adonis <- adonis(jacc ~ Species + Site, data = df_compare)

adonis
Call:
adonis(formula = jacc ~ Species + Site, data = df_compare) 

Permutation: free
Number of permutations: 999

Terms added sequentially (first to last)

          Df SumsOfSqs MeanSqs F.Model      R2 Pr(>F)    
Species    2    0.6055 0.30273  1.7690 0.04981  0.004 ** 
Site       4    2.1378 0.53445  3.1231 0.17587  0.001 ***
Residuals 55    9.4122 0.17113         0.77432           
Total     61   12.1554                 1.00000           
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

然后颠倒顺序:

adonis_2 <- adonis(jacc ~ Site + Species, data = df_compare)

adonis_2

Call:
adonis(formula = jacc ~ Site + Species, data = df_compare) 

Permutation: free
Number of permutations: 999

Terms added sequentially (first to last)

          Df SumsOfSqs MeanSqs F.Model      R2 Pr(>F)    
Site       4    2.4385 0.60962  3.5623 0.20061  0.001 ***
Species    2    0.3048 0.15238  0.8904 0.02507  0.716    
Residuals 55    9.4122 0.17113         0.77432           
Total     61   12.1554                 1.00000           
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

但我不知道如何解释,因为顺序很重要,而且我不确定物种之间是否存在差异。

经过一番搜索,我决定使用strata。

我认为这是在说:当你只比较同一地点的物种时,共生的物种是否不同。

species_adonis <- adonis(jacc ~ Species, strata = df_compare$Site, data = df_compare)

species_adonis

Call:
adonis(formula = jacc ~ Species, data = df_compare, strata = df_compare$Site) 

Blocks:  strata 
Permutation: free
Number of permutations: 999

Terms added sequentially (first to last)

          Df SumsOfSqs MeanSqs F.Model      R2 Pr(>F)
Species    2    0.6055 0.30273  1.5464 0.04981  0.335
Residuals 59   11.5500 0.19576         0.95019       
Total     61   12.1554                 1.00000  

然后要问关于站点的问题,我在阻塞中使用了物种。

我认为这是在说:当您仅比较同一物种时,站点是否有所不同

site_adonis <- adonis(jacc ~ Site, strata = df_compare$Species, data = df_compare)

Call:
adonis(formula = jacc ~ Site, data = df_compare, strata = df_compare$Species) 

Blocks:  strata 
Permutation: free
Number of permutations: 999

Terms added sequentially (first to last)

          Df SumsOfSqs MeanSqs F.Model      R2 Pr(>F)    
Site       4    2.4385 0.60962  3.5761 0.20061  0.001 ***
Residuals 57    9.7169 0.17047         0.79939           
Total     61   12.1554                 1.00000           
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

我的结论是,给定物种的微生物群落因地点而异,但微生物群落在宿主物种之间没有差异。

我的方法是正确的还是我误解了分层的使用(即阻塞)?

或者当我切换变量的顺序时,有没有办法以某种方式对测试进行平均?

1个回答

正如您自己注意到的那样,通过运行两个将固定因子倒置的 adonis 模型,您会看到分配给每个因子的方差和 P 值每次都不同。这发生在像您这样的不平衡设计中,其中与每个因素相关的自由度不同。
从您的实验描述来看,它看起来像是嵌套设计的经典案例,其中 Species 嵌套在 Site 中。在这种情况下,您要查找的模型应如下所示:
adonis <- adonis(jacc ~ Site / Species, strata = Site, data = df_compare).
请注意,应在模型公式和地层中说明嵌套性(请参阅Jari Oksanen 的回复)。