这真的是逻辑回归中的完美分离,还是发生了其他事情?

机器算法验证 r 物流 分离
2022-04-07 05:17:09

我有一些关于患者在遭受自我造成的枪伤后出现在急诊室的数据,这些数据存储在 R 中的数据框(“SIGSW”,即 47 个变量的约 16,000 个观察值)中。我想创建一个模型来帮助医生使用几个客观的协变量来预测自杀未遂或疏忽出院的“预测概率”。协变量主要是分类变量,但也有一些是连续的或二元的。我的结果,无论是否有自杀企图,都被编码为二元/指标变量“SI”,因此我认为二元逻辑回归是合适的工具。

为了构建我的模型,我打算在每个协变量上单独回归 SI,并使用每个模型的似然比检验的 p 值来告知应该考虑哪些协变量用于后向模型选择。

对于每个模型,SI~SEX、SI~AGE 等,我收到以下错误:

>glm(SI ~ SEX, family = binomial, data=SIGSW)
Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: algorithm did not converge

一点谷歌搜索表明我可能需要增加迭代次数以允许收敛。我用以下方法做到了这一点:

>glm(SI ~ SEX, family = binomial, data=SIGSW, control = list(maxit = 50))

Call:  glm(formula = SI ~ SEX, family = binomial, data = SIGSW, control = list(maxit = 50))

Coefficients:
(Intercept)          SEX  
 -3.157e+01   -2.249e-13  

Degrees of Freedom: 15986 Total (i.e. Null);  15985 Residual
Null Deviance:      0 
Residual Deviance: 7.1e-12  AIC: 4
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 

在谷歌搜索后,这条警告信息暗示了一个“完美的分离”,据我所知,这意味着我的预测器“太好了”。看到所有预测变量如何发生这种情况,我有点怀疑它们都“太好了”。难道我做错了什么?

编辑:根据答案,这是一个数据样本(出于空间考虑,我只选择了一些变量):

   SIGSW.AGENYR_C SIGSW.SEX SIGSW.RACE_C SIGSW.SI
1              19      Male        White        0
2              13      Male        Other        0
3              18      Male   Not Stated        0
4              15      Male        White        0
5              23      Male        White        0
6              11      Male        Black        0
7              16      Male   Not Stated        1
8              21      Male   Not Stated        0
9              14      Male        White        0
10             41      Male        White        0

这是 SEX 和 SI 的交叉表,表明 SI 被编码为指示变量,并且有男性和女性都有 SI,因此性别不是一个完美的预测指标。

  >table(SIGSW$SEX, SIGSW$SI)        
              0     1
  Unknown     1     3
  Male    11729  2121
  Female   1676   457

小区大小是否代表问题?

3个回答

看着这个

Coefficients:
(Intercept)          SEX  
 -3.157e+01   -2.249e-13

我看到您的模型返回的系数为零SEX也可能是),并将截距驱动到将该值插入我的 R 解释器中的逻辑函数中,我得到2.2×1013031.57

> 1/(1 + exp(-31.57))
[1] 1

所以除了堕落的意义外,你并没有真正的完美分离;您的模型是说每条记录都有可能发生自杀事件。

在没有看到您的数据的情况下,我不能说为什么会这样,但我会假设这是您将响应传递给模型的编码错误。确保您的响应列被编码为指示变量,表示没有自杀,表示自杀。01

为了构建我的模型,我打算在每个协变量上单独回归 SI,并使用每个模型的似然比检验的 p 值来告知应该考虑哪些协变量用于后向模型选择。

我不禁评论说这是一个糟糕的程序。对单个预测变量的响应进行回归几乎不会告诉您有关多元模型结构的任何信息。向后选择也有它自己的许多问题,如果你在这个网站上搜索这个词,你会发现。

如果要进行变量选择,请考虑更原则的方法,例如glmnet.

我认为使用 16000 个样本不太可能有完美的预测,在进行单独的 logit 模型之前尝试对每个变量进行交叉制表,看看是否有完美的预测。通过这种方式,您还可以检查响应变量是否被编码为指标。

首先,令人沮丧的是,您的统计学教授正在训练您使用逐步选择进行模型构建。有关逐步选择问题的介绍以及更好的选择,请参阅此页面;按照这个网站上的stepwise-regressionmodel-selection标签。

根据您的表格,使用 3 个级别的分类“SEX”变量,并且glm输出中只有 1 个(基本上为零)系数,有些东西很可疑。它可能以某种方式源于您在极少数情况下包含“未知”类别(并且这似乎是您表中该因素的参考类别),或者以glm某种方式将“SEX”解释为数字而不是分类变量. 在整个过程中将缺失数据编码为 NA,而不是将它们标记为“未知”,然后droplevels()在 R 中删除未使用的“未知”级别。