2014-11-22 669 views
2

我需要測試我應該在我的模型中包含哪些效果,以便對奶牛進行遺傳評估。在SAS中,我會使用proc GLM。 SAS的代碼將是:Proc GLM(SAS)使用R

data paula1; set paula0; 
proc glm; 
class year herd season; 
model milk= year herd season age age*age; 
run; 

我的R代碼裏面是:

model1 = glm(milk ~ factor(year) + factor(herd) + factor(season) + age + I(age^2), data=paula1) 
anova(model1) 

我懷疑這有什麼不對的,因爲所有的影響在統計上顯著,甚至當我包括不相關的其他影響性狀。我沒有SAS許可證來比較結果。 R中的代碼是否正確? R中的glm是否表示類型3的平方和(對於SAS中提出的不平衡數據)?這種情況下使用lm有什麼區別嗎? 在此先感謝。 Paula

+1

你應該閱讀這個,特別是鏈接的pdf,爲什麼R社區對所謂的III型SS有強烈的感受:http://stats.stackexchange.com/a/23198 – joran 2014-11-22 23:35:27

+1

對「III型」的簡短回答:不。您沒有提供數據時,您要求我們對方法進行評論。不是一個真正的編碼問題,是嗎?如果你想問統計問題,你應該去CrossValidated.com – 2014-11-22 23:42:08

回答

5

這是SAS和R用戶之間非常常見的錯誤。

SAS中的glm包與R中的glm函數不同,下面我會解釋它。

This適用於SAS官方網站:「GLM程序使用最小二乘法擬合一般線性模型」。 SAS中的GML簡稱爲一般線性模型。這些與廣義線性模型完全不同,這是R中GML函數計算的結果。

This是R中的GLM功能:「廣義線性模型也同樣容易融入R作爲普通的線性模型事實上,他們只需要一個額外的參數來指定變化和鏈接功能 的基本。工具用於裝配廣義線性模型是GLM功能,其具有folllowing通式結構:

glm(formula, family, data, weights, subset, ...)

通常,一般線性模型用於參數估計的普通最小二乘法,而廣義線性模型使用參數估計的最大似然估計。廣義線性模型也「允許線性模型通過鏈接函數與響應變量相關,並允許每個測量的方差的大小是其預測值的函數」(取自維基百科here)「

要結束我長時間的演講,您需要使用的是R中的lm函數,因爲對於ANOVA表,您將得到與SAS中的GLM包相同的結果。對於III型錯誤,請檢查Joran和BondedDust的準確評論。

希望它有幫助!

+0

非常感謝@LyzandeR。 – PaulaF 2014-11-23 00:53:32

1

對應於R的glm的SAS程序是GENMOD。

在R的迴歸模型中輸入多項式項的正確方法是使用poly。閱讀幫助頁面?poly。對於二次程度的正交多項式:

lm(milk ~ year + herd + season + poly(age, 2), data=dat) 

您明確不應該使用'年齡+ I(年齡^ 2),因爲這兩個方面都會有高度的相關性,你會得到約的意義錯誤的推論或更多的多項式次序。

如果列的類別不明確,使得它們不是字符或因子或邏輯的,那麼您可能需要在它們周圍包裝factor(.),如LyzandeR所示,但通常只有在術語類型-'數字'。

如果由於某種原因,例如缺乏上級關於III型錯誤的教育,您需要使用它們,然後查看具有生產設施的汽車包裝。