使用R进行SAS的Proc GLM分析

4

我需要测试哪些效应应该包含在我的牛的遗传评估模型中。在SAS中,我会使用proc GLM。 SAS代码如下:

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社区对所谓的Type III SS有强烈的感受:http://stats.stackexchange.com/a/23198 - joran
1
“Type III”的简短回答:不行。你要求我们评论一种统计测试的方法,但你没有提供任何数据。这不是一个编码问题,对吧?如果你想问统计学问题,你应该去CrossValidated.com。 - IRTFM
3个回答

7

这是SAS和R用户之间非常常见的错误。

SAS中的glm包与R中的glm函数不同,下面我会解释一下。

这是SAS官方网站上链接1给出的介绍:“GLM过程使用最小二乘法来拟合一般线性模型”。在SAS中,GML简称为广义线性模型。这些与R中的glm函数计算的广义线性模型完全不同。

R的glm函数链接2介绍如下:“在R中,广义线性模型的拟合和普通线性模型一样容易。实际上,只需要额外一个参数来指定方差和链接函数。 拟合广义线性模型的基本工具是glm函数,其具有以下一般结构:

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

一般而言,普通线性模型使用最小二乘法进行参数估计,而广义线性模型使用最大似然估计进行参数估计。广义线性模型还“允许通过链接函数将线性模型与响应变量相关联,并允许每个测量的方差大小成为其预测值的函数。(摘自维基百科这里)”
结束我的演讲,你需要使用R中的lm函数,它将给出与SAS中GLM包相同的ANOVA表结果。对于第三类错误,请查看Joran和BondedDust的准确评论。
希望能帮到你!

非常感谢 @LyzandeR。 - PaulaF

1

对应于R的glm的SAS过程是GENMOD。

在R的回归模型中输入多项式项的正确方法是通过使用poly。阅读帮助页面?poly。对于二次度正交多项式:

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

你不应该使用 `age + I(age^2)`,因为这两个项之间存在高度相关性,会导致对多项式阶数的一个或多个重要性的推断出现错误。

如果有关于列的类别存在歧义,使它们不是字符、因子或逻辑类型,则可能需要将 factor(.) 包装在它们周围,就像LyzandeR所示,但通常只有在术语的类型为“数字”时才需要这样做。

如果由于某种原因(例如上级对III型错误缺乏教育),您确实需要使用它们,请查看car包,该包具有生成它们的功能。


0
以下脚本将会实现你想要的功能。
install.packages("sasLM")

require(sasLM)

GLM(milk ~ factor(year) + factor(herd) + factor(season) + age + I(age^2), paula1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接