我有一个数据集,起始如下:
> d.weight
R N P C D.weight
1 1 0 0 GO 45.3
2 2 0 0 GO 34.0
3 3 0 0 GO 19.1
4 4 0 0 GO 26.6
5 5 0 0 GO 23.5
6 1 45 0 GO 22.1
7 2 45 0 GO 15.5
8 3 45 0 GO 23.4
9 4 45 0 GO 15.8
10 5 45 0 GO 42.9
...
R
代表重复,共有5个(1-5)。N
代表氮水平,也有5个(0、45、90、180、360)。P
代表磷水平,同样有5个(0、35、70、140、280)。C
代表植物组合,共有4种(GO、GB、LO、LB)。D.weight
是干重,以克为单位。
然而,当我进行方差分析时,自由度会出现错误。通常情况下,我会在完整数据集的子集上运行ANOVA,但是让我们做一次我不会实际执行的分析,这样您就可以看到几乎所有的Df(自由度)都是错误的。
> example.aov=aov(D.weight ~ R+N+P+C, data=d.weight)
> summary(example.aov)
Df Sum Sq Mean Sq F value Pr(>F)
R 1 1158 1158 9.484 0.00226 **
N 1 202 202 1.657 0.19900
P 1 11040 11040 90.408 < 2e-16 ***
C 3 41032 13677 112.010 < 2e-16 ***
Residuals 313 38220 122
基本上,唯一正确的是C因子。这是因为它具有字母而不是数字吗?
我在某个地方发现,如果我在每个术语中写入interaction()
,我会得到正确的Df,但我不知道这是否总体上是正确的做法。例如:
> example.aov2=aov(D.weight ~ interaction(R)+interaction(N)+interaction(P)+interaction(C), data=d.weight)
> summary(example.aov2)
Df Sum Sq Mean Sq F value Pr(>F)
interaction(R) 4 7423 1856 19.544 2.51e-14 ***
interaction(N) 4 543 136 1.429 0.224
interaction(P) 4 13788 3447 36.301 < 2e-16 ***
interaction(C) 3 41032 13677 144.042 < 2e-16 ***
Residuals 304 28866 95
我只尝试了使用C
因子来检查是否会出现问题:
> example.aov3=aov(D.weight ~ C, data=d.weight)
> summary(example.aov3)
Df Sum Sq Mean Sq F value Pr(>F)
C 3 41032 13677 85.38 <2e-16 ***
Residuals 316 50620 160
>
> example.aov4=aov(D.weight ~ interaction(C), data=d.weight)
> summary(example.aov4)
Df Sum Sq Mean Sq F value Pr(>F)
interaction(C) 3 41032 13677 85.38 <2e-16 ***
Residuals 316 50620 160
看起来都一样。我是否应该在各个地方添加interaction()
?
facs <- c("R","N","P"); d_weight[facs] <- lapply(d.weight[facs],factor)
- Ben Bolkerfactor()
语句(例如D.weight ~ factor(R)+factor(N)+factor(P)
),或者将新的因子变量作为辅助变量(例如fR
、fN
、fP
)而不是覆盖旧变量...如果你提供一个完全可重现的示例 http://tinyurl.com/reproducible-000,说明你想要的图形类型,你可能会得到更明确的帮助。 - Ben Bolker