当我包括因子1,因子2及其相互作用时,交互项将每个基本级别的组合作为其基本级别。但是,如果我仅包括交互项(因子1:因子2而不是因子1 *因子2),则将两者的最后一级的组合用作参考(即,该行具有用于估计的“NA”,std错误等)。在构建模型之前,我已经多次检查过每个因素都配置了正确的基本级别。有没有办法让每个第一级的组合作为参考?谢谢!
答案 0 :(得分:0)
让我们来看看这里发生了什么。
(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
时,a-b
参数是f2==A
对比度;当f2B
时,A-B
参数是f1==a
对比度;考虑到加性期望,相互作用是bB-aA
之间的对比。
如果我们明确添加交互,R不知道丢弃拦截列。在这个过度参数化的模型矩阵中,并没有真正的&#34;基线&#34;级别,但是当存在排名缺陷时,R会默认删除 last 列,因此您最终会有效地将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~.
表示& #34;使用数据框中的所有变量(响应变量除外)作为预测变量&#34;)。
dd3 <- data.frame(y=dd2$y,X3[,-(1:2)])
coef(lm(y~.,data=dd3))
查看上面的模型矩阵但忽略第二列,我们将其解释为:
(Intercept)
([1 0 0 0]
)是a-A
f1b:f2A
([1 1 0 0]
)与a-b
f2=A
对比
f1a:f2B
([1 0 1 0]
)与A-B
f1=a
对比
b-B
和a-A
之间的直接对比,但未校正的加性效果。这真的是你想要的吗?