GLM中删除具有多种因素预测变量的截距。

4

我正在使用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)

该模型输出将显示有关模型及其系数的所有信息。

总结输出中缺少了a和b的因子级别(a1和b1)。我知道它在模型的“截距”中被固定了。我已经了解到,如果我想要删除截距项并查看这些因子级别的估计值,我只需向模型公式添加-1或+0,即:

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

...或者... mod2 <- glm(y~a+b+0, family=binomial(logit),data=pretend) summary(mod2)

在新模型(mod2)中,截距项消失了,变量a的因子水平a1出现在系数列表中。但是,变量b的因子水平b1仍然缺失,鉴于现在没有截距项,我如何解释该因子水平的比值率呢?

请问有人能够解释一下如何获取b1的系数以及为什么会出现这种情况吗?

谢谢。


消失的项的系数为零。在模型中,“a”的系数是“a_”-“a1”,“b”的系数是“b_”-“b1”,因此a1和b1的系数为零(因为glm使用“contr.treatment”)。在mod2中,b1的系数确实为零,因为您没有给出截距。我认为这不是一个编程主题。 - cuttlefish44
3个回答

1
为什么要去除截距项并获取a1的系数?
使用因子变量拟合逻辑回归模型,并将第一个因子级别设置为参考值。此因子级别的对数几率(系数)设置为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

0

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

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


我刚刚重新运行了模型并交换了a和b,使得: 'mod2 <- glm(y~b+a-1, family=binomial(logit),data=pretend) ' 然后输出中出现了b1,但是a1却不见了。但奇怪/有趣的是,在第一次实例中a1的系数和标准误差,在第二次实例中b1的系数和标准误差完全相同。为什么?我现在有点困惑。 - MiMi

0

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

options(contrasts = c('contr.sum','contr.poly'))

这里的假设是a_i的总和=0,b_i的总和=0(尽管我刚想到这可能不适用于GLM)。对于这些对比度,通常会省略最后一个a和b,因为它们可以通过取其他a或b的相反数来恢复(因为它们都加起来等于0)。

查看此问题以获取更多参考资料。 https://stats.stackexchange.com/questions/162381/how-to-fit-a-glm-with-sum-to-zero-constraints-in-r-no-reference-level


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接