2014-11-22 157 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型错误的教育,您需要使用它们,然后查看具有生产设施的汽车包装。