繁体   English   中英

在R中建立广义线性模型时,如何为交互项设置基本水平?

[英]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对比度
  • 相互作用现在是bBaA之间的直接对比,但未对累加效应进行校正 那真的是您想要的吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM