R型III SS产生不一致的结果

时间:2017-03-25 21:55:19

标签: r anova

我已经在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相同,但鱼和营养素的结果不断变化而且从不相同?

似乎有些事情是错误的,只有在数据表上稍有变化才会发生如此巨大的变化,而这些变化本身应该对结果没有任何影响。我已尽一切努力在完全相同的条件下运行上述模型,唯一的变化是我提到的数据表。

另请注意,我已经能够使用类似的一组变量和级别来复制问题,使用类似的完全组合数据的操作。

1 个答案:

答案 0 :(得分:0)

看起来R似乎在这里使用有序因子,因此更改级别名称将改变顺序(默认为字母顺序),从而改变拟合。尝试data$Fish <- factor(data$Fish,ordered=FALSE) - 和营养素。如果位置只有两个级别则无关紧要,无论如何都应该订购时间。