2017-03-25 61 views
0

我一直在R中使用III型SS多年,現在似乎沒有問題。但是現在我遇到了一個問題,R中的III型方塊和汽車包裝產生了高度不一致的結果。R型III SS產生不一致的結果

是的,我每次都運行這行代碼。

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 

當我最初在RI跑這有養分和魚有用於每個級別的所有數值和跑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  

以上是不同的是魚和女的唯一變量trient,下面的每個迭代都是一樣的。

然後,我進入並對數據表做了一個小改動,將魚的三個等級(最初爲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)在魚另一個巨大的變化結果,與最接近結果的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

看起來好像R可能在這裏使用有序因子,所以改變等級名稱將改變排序(默認情況下按字母順序排列),從而改變擬合。嘗試data$Fish <- factor(data$Fish,ordered=FALSE) - 也適用於營養素。如果地點只有兩個級別,這不會有什麼關係,而且時間也應該是有序的。

+0

工作。謝謝! – Matt