我已经在R中使用III型SS多年了,现在看似没有问题。但是现在我在R中遇到了III型平方和的问题,与汽车包装产生了高度不一致的结果。
是的,我每次都运行这行代码。
options(contrasts = c("contr.treatment", "contr.poly"))
我使用的模型是:
M1 <- aov(Response ~ Location + Time + Fish*Nutrient, data=data)
Anova(M1, type="III")
位置(2),时间(3),鱼(3)和营养素(3)都是分类变量(括号中的#个级别)。如果这些分类变量在数据文件中列为数字,我运行(一个例子):
data$Fish <- as.factor(data$Fish)
这些是我从SAS获得的结果:
Sum Sq Df F value Pr(>F)
Location 13.122 1 22.08 <.0001
Time 15.746 2 7.87 <.0001
Fish 25.876 2 12.94 <.0001
Nutrient 22.074 2 11.04 <.0001
Fish:Nutrient 13.780 4 3.44 0.0006
当我最初在R中运行它时,我使用Nutrient和Fish以及每个级别的所有数值,并为每个变量运行as.factor并收到以下结果:
Sum Sq Df F value Pr(>F)
(Intercept) 56.827 1 95.6078 2.758e-13 ***
Location 13.122 1 22.0767 2.020e-05 ***
Time 15.746 2 13.2459 2.328e-05 ***
Fish 24.682 2 20.7632 2.531e-07 ***
Nutrient 0.424 2 0.3567 0.7017240
Fish:Nutrient 13.780 4 5.7959 0.0006352 ***
Residuals 30.313 51
上面唯一不同的变量是Fish和Nutrient,下面的每次迭代都是如此。
然后我进入并对数据表进行了一处小改动,将三个级别的鱼(原来为0,1,2)中的一个更改为(z,1,2)。输出更改为:
Sum Sq Df F value Pr(>F)
(Intercept) 5.3556 1 9.0104 0.0041488 **
Location 13.1220 1 22.0767 2.020e-05 ***
Time 15.7462 2 13.2459 2.328e-05 ***
Fish 24.6825 2 20.7632 2.531e-07 ***
Nutrient 17.7692 2 14.9477 7.780e-06 ***
Fish:Nutrient 13.7799 4 5.7959 0.0006352 ***
Residuals 30.3134 51
一个巨大的变化!并且输出不会根据我是否为这些新级别运行as.factor而改变。
然后我改变了另一个级别的鱼(现在:z,o,2),输出只略微改为:
Sum Sq Df F value Pr(>F)
(Intercept) 7.6351 1 12.8455 0.0007557 ***
Location 13.1220 1 22.0767 2.020e-05 ***
Time 15.7462 2 13.2459 2.328e-05 ***
Fish 24.6825 2 20.7632 2.531e-07 ***
Nutrient 17.6604 2 14.8562 8.243e-06 ***
Fish:Nutrient 13.7799 4 5.7959 0.0006352 ***
Residuals 30.3134 51
更改鱼的最后一级(z,o,t)后,输出略有变化:
Sum Sq Df F value Pr(>F)
(Intercept) 5.3556 1 9.0104 0.0041488 **
Location 13.1220 1 22.0767 2.020e-05 ***
Time 15.7462 2 13.2459 2.328e-05 ***
Fish 24.6825 2 20.7632 2.531e-07 ***
Nutrient 17.7692 2 14.9477 7.780e-06 ***
Fish:Nutrient 13.7799 4 5.7959 0.0006352 ***
Residuals 30.3134 51
上面的输出与我在下面显示的最后三个输出相同。
然后我开始操纵营养素(最初:0,4,8),同时将鱼保持在新的水平(z,o,t)。我首先将营养素改为(c,4,8):
Sum Sq Df F value Pr(>F)
(Intercept) 27.783 1 46.7425 9.854e-09 ***
Location 13.122 1 22.0767 2.020e-05 ***
Time 15.746 2 13.2459 2.328e-05 ***
Fish 14.578 2 12.2628 4.484e-05 ***
Nutrient 17.769 2 14.9477 7.780e-06 ***
Fish:Nutrient 13.780 4 5.7959 0.0006352 ***
Residuals 30.313 51
更改两个级别(c,f,8):
Sum Sq Df F value Pr(>F)
(Intercept) 51.708 1 86.9940 1.313e-12 ***
Location 13.122 1 22.0767 2.020e-05 ***
Time 15.746 2 13.2459 2.328e-05 ***
Fish 0.396 2 0.3332 0.7182029
Nutrient 17.769 2 14.9477 7.780e-06 ***
Fish:Nutrient 13.780 4 5.7959 0.0006352 ***
Residuals 30.313 51
另一个巨大的变化!
三个级别(c,f,e)导致Fish的另一个巨大变化,最接近SAS的结果:
Sum Sq Df F value Pr(>F)
(Intercept) 5.3556 1 9.0104 0.0041488 **
Location 13.1220 1 22.0767 2.020e-05 ***
Time 15.7462 2 13.2459 2.328e-05 ***
Fish 24.6825 2 20.7632 2.531e-07 ***
Nutrient 17.7692 2 14.9477 7.780e-06 ***
Fish:Nutrient 13.7799 4 5.7959 0.0006352 ***
Residuals 30.3134 51
位置原本也是一个有两个级别(1,2)的数字变量。所以我改变了一个级别(y,2):
Sum Sq Df F value Pr(>F)
(Intercept) 24.474 1 41.1763 4.535e-08 ***
Location 13.122 1 22.0767 2.020e-05 ***
Time 15.746 2 13.2459 2.328e-05 ***
Fish 24.683 2 20.7632 2.531e-07 ***
Nutrient 17.769 2 14.9477 7.780e-06 ***
Fish:Nutrient 13.780 4 5.7959 0.0006352 ***
Residuals 30.313 51
然后是两个级别(y,z):
Sum Sq Df F value Pr(>F)
(Intercept) 5.3556 1 9.0104 0.0041488 **
Location 13.1220 1 22.0767 2.020e-05 ***
Time 15.7462 2 13.2459 2.328e-05 ***
Fish 24.6825 2 20.7632 2.531e-07 ***
Nutrient 17.7692 2 14.9477 7.780e-06 ***
Fish:Nutrient 13.7799 4 5.7959 0.0006352 ***
Residuals 30.3134 51
操作位置时没有变化,时间也是如此。那么,为什么我的位置,时间和鱼:营养素相互作用的结果在所有这些中都是一致的,并且与SAS相同,但鱼和营养素的结果不断变化而且从不相同?
似乎有些事情是错误的,只有在数据表上稍有变化才会发生如此巨大的变化,而这些变化本身应该对结果没有任何影响。我已尽一切努力在完全相同的条件下运行上述模型,唯一的变化是我提到的数据表。
另请注意,我已经能够使用类似的一组变量和级别来复制问题,使用类似的完全组合数据的操作。
答案 0 :(得分:0)
看起来R似乎在这里使用有序因子,因此更改级别名称将改变顺序(默认为字母顺序),从而改变拟合。尝试data$Fish <- factor(data$Fish,ordered=FALSE)
- 和营养素。如果位置只有两个级别则无关紧要,无论如何都应该订购时间。