【问题标题】:Why adonis function DF changes with different factors combination?为什么阿多尼斯函数DF随不同因素组合而变化?
【发布时间】:2021-12-23 15:30:52
【问题描述】:
> data(dune) 
> data(dune.env)  
> str(dune.env)  
'data.frame':   20 obs. of  5 variables:
$ A1        : num  2.8 3.5 4.3 4.2 6.3 4.3 2.8 4.2 3.7 3.3 ...
$ Moisture  : Ord.factor w/ 4 levels "1"<"2"<"4"<"5": 1 1 2 2 1 1 1 4 3 2 ...
$ Management: Factor w/ 4 levels "BF","HF","NM",..: 4 1 4 4 2 2 2 2 2 1 ...
$ Use       : Ord.factor w/ 3 levels "Hayfield"<"Haypastu"<..: 2 2 2 2 1 2 3 3 1 1 ...
$ Manure    : Ord.factor w/ 5 levels "0"<"1"<"2"<"3"<..: 5 3 5 5 3 3 4 4 2 2 ...

如上图,Moisture 有 4 组,Management 有 4 组,Manure 在我跑的时候有 5 组:

adonis(dune ~ Manure*Management*A1*Moisture, data=dune.env, permutations=99)

Call:
adonis(formula = dune ~ Manure * Management * A1 * Moisture,      data = dune.env, permutations = 99) 

Permutation: free
Number of permutations: 99

Terms added sequentially (first to last)

              Df SumsOfSqs MeanSqs F.Model      R2 Pr(>F)
Manure             4    1.5239 0.38097 2.03088 0.35447   0.13
Management         2    0.6118 0.30592 1.63081 0.14232   0.16
A1                 1    0.3674 0.36743 1.95872 0.08547   0.21
Moisture           3    0.6929 0.23095 1.23116 0.16116   0.33
Manure:Management  1    0.1091 0.10906 0.58138 0.02537   0.75
Manure:A1          4    0.3964 0.09909 0.52826 0.09220   0.91
Management:A1      1    0.1828 0.18277 0.97431 0.04251   0.50
Manure:Moisture    1    0.0396 0.03963 0.21126 0.00922   0.93
Residuals          2    0.3752 0.18759         0.08727       
Total             19    4.2990                 1.00000

为什么管理的 DF 不是 3(4-1)?

【问题讨论】:

    标签: r vegan


    【解决方案1】:

    这是一个笼统的答案,而不是具体的答案。

    您的公式 Moisture*Management*A1*Manure 对应于具有 160 个 (!) 预测变量 (2*4*4*5) 的线性模型:

    dim(model.matrix(~Moisture*Management*A1*Manure, dune.env))
    

    adonis 在内部构建这个模型矩阵并使用它来构建计算排列统计的机制。当存在多个预测变量的共线性组合时,它会删除足够的列以使问题再次得到明确定义。删除列的详细规则取决于列的顺序;如果您对问题中的因素重新排序,您将看到报告的 Df 更改。

    就其价值而言,我认为 df 计算根本不会改变统计结果 - 统计数据基于从排列得出的分布,而不是来自依赖 df 的分析计算。

    【讨论】:

      【解决方案2】:

      Ben Bolker 做对了。如果你只看ManagementManure 而忘记所有其他变量,你会看到:

      > with(dune.env, table(Management, Manure))
                Manure
      Management 0 1 2 3 4
              BF 0 2 1 0 0
              HF 0 1 2 2 0
              NM 6 0 0 0 0
              SF 0 0 1 2 3
      

      查看只有一个非零大小写的行 Management NM 和列 Manure 0。这意味着Management NMManure 0 是同义词,相同的东西(或“别名”)。在您的模型中有Manure 之后,Management 只有三个新级别,因此 2 d.f.如果您以相反的顺序执行此操作并首先拥有Management,那么您只有四个您还不知道的Manure 级别,这将为您提供3 d.f. Manure.

      虽然您确实对模型进行了过度参数化,但仅使用这两个变量也会得到相同的结果。比较模型:

      adonis2(dune ~ Manure + Management, data=dune.env)
      adonis2(dune ~ Management + Manure, data=dune.env)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 2015-06-17
        相关资源
        最近更新 更多