Proc GLM(SAS)使用R.

时间:2014-11-22 23:10:24

标签: r sas

我需要测试我应该在我的模型中包含哪些影响用于奶牛的遗传评估。在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中的glm是否表示3型平方和(对于SAS中提供的不平衡数据)?在这种情况下使用lm有什么区别吗? 提前致谢。 保

3 个答案:

答案 0 :(得分:6)

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

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

This来自官方网站的SAS:“GLM程序使用最小二乘法来拟合一般线性模型”。 SAS中的GML简称一般线性模型。这些与广义线性模型完全不同,这是R中的GML函数计算的。

This用于R中的glm函数:“广义线性模型与普通线性模型一样容易适合R。事实上,它们只需要一个额外的参数来指定方差和链接函数。 拟合广义线性模型的基本工具是glm函数,它具有以下通用结构:

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

通常,一般线性模型使用普通最小二乘法进行参数估计,而广义线性模型使用最大似然估计进行参数估计。广义线性模型还“允许线性模型通过链接函数与响应变量相关,并允许每个测量的方差的大小是其预测值的函数。(取自维基百科here)”

结束我的长篇演讲你需要使用的是R中的lm函数,对于ANOVA表,它将给出与SAS中的GLM包相同的结果。对于III型错误,请检查joran和BondedDust的准确评论。

希望它有所帮助!

答案 1 :(得分:1)

与R的glm对应的SAS程序是GENMOD。

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

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

你特别不应该使用'age + I(年龄^ 2),因为这两个项具有高度的相关性,你会得到关于一个或多个多项式阶的重要性的错误推论。

如果列的类不明确,使得它们不是字符或因子或逻辑,那么您可能需要将factor(.)包裹在它们周围,如LyzandeR所示,但通常只有在一个术语时才需要是'-numeric'类型。

如果由于某种原因,例如你的上级缺乏关于III型错误的教育,你需要使用它们,然后看看有生产设施的汽车包装。

答案 2 :(得分:0)

以下脚本将满足您的要求。

install.packages("sasLM")

require(sasLM)

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