我需要测试我应该在我的模型中包含哪些影响用于奶牛的遗传评估。在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有什么区别吗? 提前致谢。 保
答案 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)