[英]How do I set the base level for an interaction term when building a generalized linear model in R?
当我包括factor1,factor2及其交互时,交互项将每个基础级别的组合作为其基础级别。 但是,如果仅包含交互项(factor1:factor2而不是factor1 * factor2),则将两者的最后一级组合用作参考(即,该行的“ NA”用于估算,标准误差等)。 在构建模型之前,我已多次检查每个因素都配置了正确的基本水平。 有没有办法使每个人的第一层次的组合成为参考? 谢谢!
让我们看看这里发生了什么。
(dd <- expand.grid(f1=letters[1:2],f2=LETTERS[1:2]))
## f1 f2
## 1 a A
## 2 b A
## 3 a B
## 4 b B
添加一个响应变量:
dd2 <- data.frame(dd,y=c(1,2,3,5))
使用model.matrix()
查看构造了哪些伪变量。
data.frame(dd,model.matrix(~f1*f2,data=dd),check.names=FALSE)
## f1 f2 (Intercept) f1b f2B f1b:f2B
## 1 a A 1 0 0 0
## 2 b A 1 1 0 0
## 3 a B 1 0 1 0
## 4 b B 1 1 1 1
因此基线(截距)是a:A
组合; f1b
参数是f2==A
时的ab
对比度; f2B
参数是f1==a
时的AB
对比度; 给定加性期望,相互作用是bB-aA
之间的对比。
如果我们显式添加交互,则R不知道删除intercept列。 在这个过度参数化的模型矩阵中,实际上并没有“基线”级别,但是当存在秩不足时,R会默认删除最后一列,因此最终可以有效地获得bB
作为基线(因为bB
行如果我们删除最后一列,则矩阵为[1 0 0 0]
。
data.frame(dd,X3 <- model.matrix(~f1:f2,data=dd),check.names=FALSE)
## f1 f2 (Intercept) f1a:f2A f1b:f2A f1a:f2B f1b:f2B
## 1 a A 1 1 0 0 0
## 2 b A 1 0 1 0 0
## 3 a B 1 0 0 1 0
## 4 b B 1 0 0 0 1
如果要使用指定的模型矩阵,则可以作弊并直接执行此操作。 您必须记住,如果您在公式中未指定-1
,R会自动重新添加一个拦截列,因此这里我们摆脱了前两列( y~.
说“使用数据中的所有变量框架(响应变量除外)作为预测变量”)。
dd3 <- data.frame(y=dd2$y,X3[,-(1:2)])
coef(lm(y~.,data=dd3))
查看上面的模型矩阵,但省略第二列,我们将其解释为:
(Intercept)
( [1 0 0 0]
)是aA
的值 f1b:f2A
( [1 1 0 0]
)是f2=A
时的ab
对比度 f1a:f2B
( [1 0 1 0]
)是f1=a
时的AB
对比度 bB
和aA
之间的直接对比,但未对累加效应进行校正 。 那真的是您想要的吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.