R 使用多因子预测器从GLM中删除截距

R 使用多因子预测器从GLM中删除截距,r,glm,intercept,binomial-coefficients,R,Glm,Intercept,Binomial Coefficients,我正在用R中的logit链接函数进行二项逻辑回归。我的回答是阶乘[0/1],我有两个多级阶乘预测因子-我们称它们为a和b,其中a有4个因子水平(a1、a2、a3、a4),b有9个因子水平(b1、b2…b9)。因此: mod <- glm(y~a+b, family=binomial(logit),data=pretend) summary(mod) mod有趣的是给出了a1。人们期望一个因子水平作为“参考”,因此在输出中没有任何或(因为它是1.0) 我认为b1是您的参考,因此是隐藏的,因

我正在用R中的logit链接函数进行二项逻辑回归。我的回答是阶乘[0/1],我有两个多级阶乘预测因子-我们称它们为a和b,其中a有4个因子水平(a1、a2、a3、a4),b有9个因子水平(b1、b2…b9)。因此:

mod <- glm(y~a+b, family=binomial(logit),data=pretend) summary(mod)

mod有趣的是给出了
a1
。人们期望一个因子水平作为“参考”,因此在输出中没有任何或(因为它是1.0)


我认为
b1
是您的参考,因此是隐藏的,因此是1.0。

您可以尝试调整对比度。我最喜欢的是

options(contrasts = c('contr.sum','contr.poly'))
这里的假设是,a_i的和=0,b_i的和=0(尽管我刚刚想到,这可能不是GLM的情况)与这些对比,它通常省略最后的a和b,因为它们可以通过分别取其他a或b的和的相反值来恢复(因为它们的和都为0)

查看此问题或更多参考资料。
为什么要删除截距项并获取
a1
的系数

以第一因子水平为参考,拟合了一个带因子变量的logistic回归模型。该因子水平的对数优势(系数)设置为1.0

在比较因素(或组)之间的对数优势时,得出的因素水平的所有对数优势均指基础优势。因此,您可以计算不同组之间的优势比,并预测事件发生的可能性(与基本因子水平相比)

如果
a
中不再有参考级别,我不知道
a
的任何级别的参考级别是什么。如果
a
的参考是
b1
,您如何解释?是否有任何证据表明删除截距是有意义的?(非常好奇,还没有听说过这种方法)

顺便说一句,你不需要截距来计算因子水平之间的优势比。下面是一个计算随机二项式glm的优势比的小示例:

library(oddsratio)
fit.glm <- glm(admit ~ gre + gpa + rank, data = data.glm, family = "binomial") # fit model

# Calculate OR for specific increment step of continuous variable
calc.oddsratio.glm(data = data.glm, model = fit.glm, incr = list(gre = 380, gpa = 5))

predictor oddsratio CI.low (2.5 %) CI.high (97.5 %)          increment
1     gre     2.364          1.054            5.396                380
2     gpa    55.712          2.229         1511.282                  5
3   rank2     0.509          0.272            0.945 Indicator variable
4   rank3     0.262          0.132            0.512 Indicator variable
5   rank4     0.212          0.091            0.471 Indicator variable
库(oddsratio)

glm我刚刚重新运行了模型,并交换了a和b,这样:“mod2消失项的coef为零。在mod中,“a”的coef为“a”—“a1”,而“b”的coef为“b”—“b1”,因此a1和b1的coef为零(因为glm使用“控制处理”)。在mod2中,b1的coef实际上是零,因为你没有给出截距。我认为这不是一个编程主题。
library(oddsratio)
fit.glm <- glm(admit ~ gre + gpa + rank, data = data.glm, family = "binomial") # fit model

# Calculate OR for specific increment step of continuous variable
calc.oddsratio.glm(data = data.glm, model = fit.glm, incr = list(gre = 380, gpa = 5))

predictor oddsratio CI.low (2.5 %) CI.high (97.5 %)          increment
1     gre     2.364          1.054            5.396                380
2     gpa    55.712          2.229         1511.282                  5
3   rank2     0.509          0.272            0.945 Indicator variable
4   rank3     0.262          0.132            0.512 Indicator variable
5   rank4     0.212          0.091            0.471 Indicator variable