为什么包括一些观察两次会改变逻辑回归的系数?

机器算法验证 回归 物流
2022-03-24 06:46:16

当我简单地复制一个观察子集并使用扩展数据构建相同的逻辑回归模型时,协变量的系数会发生变化。如果我复制整个数据集,它们保持不变。

这让我很困惑,因为所有协变量都是分类的,所以当我复制一个子集时,我没有提供任何新信息。重复一组具有协变量组合的观察结果;结果没有改变。

例如,我修改了本教程中使用的 UCLA 逻辑回归数据集,并创建了一个所有协变量都是离散变量的数据集。这为我提供了您可以在此处看到的数据集(csv 文件)

当我对其进行逻辑回归时,我得到:

dff <- read.table('d:/temp/ucla-factored.csv',sep=',',header=TRUE)
dff$rank <- factor(dff$rank)
mylogit <- glm(admit ~ gre + gpa + rank, data = dff, family='binomial')
summary(mylogit)

Call:
glm(formula = admit ~ gre + gpa + rank, family = "binomial", 
    data = dff)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.5149  -0.8971  -0.6672   1.1441   2.0587  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  -0.7025     0.4144  -1.695 0.090046 .  
gregre2       0.4024     0.3404   1.182 0.237190    
gregre3       0.6130     0.3571   1.717 0.086038 .  
gpagpa2       0.3115     0.3121   0.998 0.318350    
gpagpa3       0.8551     0.3428   2.495 0.012609 *  
rankrank2    -0.6866     0.3166  -2.169 0.030101 *  
rankrank3    -1.3850     0.3439  -4.027 5.65e-05 ***
rankrank4    -1.6000     0.4170  -3.837 0.000124 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 499.98  on 399  degrees of freedom
Residual deviance: 459.80  on 392  degrees of freedom
AIC: 475.8

Number of Fisher Scoring iterations: 4

然后我选择 gpa 是 gpa2 的行并将它们复制并附加到数据集,在这里给我 csv 文件

使用此扩展数据集的逻辑回归给出:

dffbig <- read.table('d:/temp/ucla-factoredbig.csv',sep=',',header=TRUE)
dffbig$rank <- factor(dffbig$rank)
mylogitbig <- glm(admit ~ gre + gpa + rank, data = dffbig, family='binomial')
summary(mylogitbig)

Call:
glm(formula = admit ~ gre + gpa + rank, family = "binomial", 
    data = dffbig)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.4775  -0.8931  -0.6533   1.1939   2.1207  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  -0.8668     0.3786  -2.290   0.0220 *  
gregre2       0.5278     0.2814   1.875   0.0607 .  
gregre3       0.7013     0.2964   2.366   0.0180 *  
gpagpa2       0.2992     0.2877   1.040   0.2985    
gpagpa3       0.8481     0.3364   2.521   0.0117 *  
rankrank2    -0.5478     0.2600  -2.107   0.0351 *  
rankrank3    -1.3187     0.2873  -4.589 4.45e-06 ***
rankrank4    -1.5695     0.3460  -4.536 5.74e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 727.61  on 587  degrees of freedom
Residual deviance: 672.97  on 580  degrees of freedom
AIC: 688.97

Number of Fisher Scoring iterations: 4

为什么?只要结果没有不同,为什么观察相同的模式会改变模型的估计参数?

背景:这与我仅使用现有逻辑回归模型创建合成数据集的努力有关。当所有变量都是分类变量时,我应该能够提出所有可能的输入组合并生成输入数据,但是当合成数据反馈到逻辑回归时,事情并没有按预期进行,因为逻辑回归似乎不仅仅包括离散变量组合的分布。

1个回答

您说您对线性回归具有相同的直觉(系数不应该改变),所以我将在该设置中回答您的问题,因为线性回归更容易可视化。

我认为导致您错误直觉的原因是您在想象复制数据点不会改变散点图。但确实如此!它可能不容易看到,具体取决于您使用的散点图类型,但这就是为什么我们有类似jitter的东西。由于数据点直接在彼此之上而导致不同散点图看起来相同的现象是一个问题(称为“过度绘图”),因为它使根本不同的数据集看起来相同。

回归算法不会“看到”散点图本身,它会看到基础数据点。当你复制其中一些数据点时,它会使它们在基础数据中的表现更强烈,因此回归算法将它们视为“正确”更重要。(基本上,您可以将每个数据点的出现视为以相同的力将回归线拉向它 - 因此,如果您在给定点有两个数据点,它们会将线拉向它们的两倍。)

我将给出一个视觉示例,使用抖动来明确回归实际“看到”的内容。首先,这是一个由一个升序和一个降序组成的数据集:

平衡情节

它是对称的,因此最佳拟合线将平直通过 5.5。但是,如果我将降序复制 10 次,并使用 jitter 使散点图在视觉上看起来像底层算法的样子,会发生什么?

抖动图

现在它看起来更像是升序只是异常值,对吧?趋势线明显下降。(它与逻辑回归的工作方式完全相同,只是更难从图中清楚地说明。)