3

在 2-way ANOVA 的背景下,我想在另一个因素(SpeciesA、SpeciesB)的水平内输入一个因素(10、20、30 度)的对比度水平。这假设相互作用效应是显着的,因此不能简单地对温度主效应进行对比。

我试图在 EZanova、multcomp 和 phia 中执行此操作,但一直无法找出有效的语法。我是否错过了允许这样做的包裹?

对比度和系数

对比 1:物种 A 的 10 度与 20 度和 30 度有区别吗?Species:Temp (2,-1,-1,0,0,0) Contrast2:物种 B 的 10 度是否与 20 度和 30 度不同?Species:Temp (0,0,0,2,-1,-1) Contrast3:物种 A 的 10 度与物种 B 的 20 度和 30 度是否不同?物种:Temp (2,0,0,0,-1,-1)

species<-rep(c("speciesA","speciesB"),each=12)
temp<-rep(rep(c("10","20","30"),each=4),2)
y<-rnorm(24,5,3)
(result<-anova(lm(y~species*temp)))
4

1 回答 1

1

它是base-R的一部分。见?contrasts页面。我将说明第一个要求的对比;另外两个应该非常简单。我假设您希望单独计算这些对比度 p 值,因此我使用该how.many参数将对比度构造限制为单个比较。否则,您将获得 5 个对比,因为默认情况下,该contrasts函数会尝试构建一组跨越正交对比:

set.seed(123)
species <- rep(c("speciesA","speciesB"),each=12)
temp <- rep(rep(c("10","20","30"),each=4),2)
y<-rnorm(24,5,3)

intvar <- interaction(species, temp)  # create an interaction variable
?contrasts

需要知道哪些级别可以正确排序对比度值:

> levels(intvar)
[1] "speciesA.10" "speciesB.10" "speciesA.20" "speciesB.20" "speciesA.30"
[6] "speciesB.30"

所以这应该在 A 物种之间建立 10 与 20 或 30 角度的对比:

 contrasts(intvar, how.many=1) <- c(2,0,-1,0,-1,0)
 anova(lm(y~intvar) )
#------------
Analysis of Variance Table

Response: y
          Df  Sum Sq Mean Sq F value Pr(>F)
intvar     1   0.013  0.0129  0.0015 0.9695
Residuals 22 190.306  8.6503      

您似乎处于学习 R 的早期阶段,因此我建议您学习构建数据框以作为参数传递data=给回归函数,而不是在您的工作空间中处理“松散”的对象,请不要拿起使用的坏习惯attach

于 2015-09-12T18:06:45.430 回答