对R中逻辑回归中的0截距感到困惑

机器算法验证 r 回归 物流 解释 截距
2022-04-02 10:41:18

我正在探索在逻辑回归模型中删除截距的影响。

假设一个模型:

logit(Y=1)=β1x+β2z+0

xz是分类变量,每个级别有 2 个级别,没有截距。

我知道,没有与分类预测变量的截距会产生比较P(Y=1)在针对空情况的两个预测变量的每个级别中P(Y=1)=0.5或者logit(Y=1)=0.

我注意到一个可以理解的现象。如果您在公式右侧更改变量的顺序,则在 R 中使用 glm() 函数,系数也会发生变化。但更奇怪的是,第一个变量的系数总是相同的。

这是一个R演示:

y <- as.factor(sample(rep(1:2), 30, T))
x <- as.factor(sample(rep(1:2), 30, T))
z <- as.factor(sample(rep(1:2), 30, T))

coef(glm(y ~ x + z - 1, binomial)
#        x1         x2         z2 
#-0.1764783  0.3260739 -0.1335192

coef(glm(y ~ z + x - 1, binomial))
#        z1         z2         x2 
#-0.1764783 -0.3099976  0.5025523 

如您所见,第一个预测变量在两个模型中具有相同的系数,而另一个则不同。

这是我所期望的,但行为与我的不同:

  1. 由于两个预测变量的每个级别都与相同的空值情况进行比较,因此我希望在两个模型中具有相同的系数,而与我使用它们的顺序无关。
  2. 我希望看到每个预测变量的每个级别的系数,而不是第二个预测变量的第一个级别的系数没有显示。
  3. 因此,我假设仅将第一个变量与 null 情况进行比较,而将第二个变量与参考水平进行比较;但是这个级别是多少?是吗P(Y=1|X=1Z=1)? 用我们得到的截距复制其中一个模型:

    coef(glm(y ~ x + z - 1, binomial)
    #        x1         x2         z2 
    #-0.1764783  0.3260739 -0.1335192
    
    coef(glm(y ~ x + z, binomial))
    #(Intercept)         x2          z2 
    #-0.1764783   0.5025523  -0.1335192
    

正如预期的那样,x1 成为截距,x2 可能与 x1 相关。在这种情况下 z1 也缺失,z2 与没有截距的模型相同。

因此,我应该假设与 null 情况的比较P(Y=1)=0.5仅针对公式中的第一个变量,而另一个与通常的截距进行比较?这种行为正常吗?无论公式中预测变量的顺序如何,第一个系数都具有相同的值这一事实又如何呢?如果我想将每个预测变量的所有级别与 null 情况进行比较并为所有级别设置一个系数怎么办?或者由于某种原因我不明白理论上是不可能的?

1个回答

该问题并非特定于 GLM。这是治疗对比的问题。

您还应该使用截距查看模型:

set.seed(42)
y <- as.factor(sample(rep(1:2), 30, T))
x <- as.factor(sample(rep(1:2), 30, T))
z <- as.factor(sample(rep(1:2), 30, T))

fit0 <- glm(y ~ z + x, binomial)
predict(fit0, newdata=data.frame(z=factor(2), x=factor(1)))
coef(fit0)
#(Intercept)          z2          x2 
# -0.1151303   0.3228803   1.0588217 
predict(fit0, newdata=data.frame(z=factor(2), x=factor(1)))
#      1 
#0.20775 

这里截距代表组,其他组均值是通过将和/或x1/z1的系数相加来计算的z2x2

fit1 <- glm(y ~ z + x - 1, binomial)
coef(fit1)
#        z1         z2         x2 
#-0.1151303  0.2077500  1.0588217 
predict(fit1, newdata=data.frame(z=factor(2), x=factor(1)))
#      1 
#0.20775

这里的系数z1表示x1/z1与 中的截距相同的组fit0但是, 的系数z2代表组x1/z2而不是组均值之间的差异。请注意,0.208 = -0.115 + 0.323。通过x2/*x2系数添加到组均值来计算x1/*组均值。

现在应该很容易理解为什么顺序在这里很重要。