> 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 ...
如上所示,当我运行时,湿气有四组,管理有四组。Manure有五组:
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 of Management不是3(4-1(?
这是一个一般的答案,而不是一个具体的答案。
您的公式Moisture*Management*A1*Manure
对应于具有160(!(个预测因子(2*4*4*5
(的线性模型:
dim(model.matrix(~Moisture*Management*A1*Manure, dune.env))
adonis
在内部建立了这个模型矩阵,并用它来构造用于计算排列统计的机器。当存在预测因子的多重共线组合时,它会减少足够的列,以使问题再次得到定义。删除列的详细规则取决于列的顺序;如果您重新排序问题中的因素,您将看到报告的Df
发生变化。
值得一提的是,我认为df计算根本不会改变统计结果——统计数据是基于排列得出的分布,而不是基于依赖于df的分析计算。
Ben Bolker做对了。如果你只看Management
和Manure
,而忽略了所有其他变量,你会看到:
> 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 NM
和Manure 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)