R中的逻辑回归导致完美的分离(Hauck-Donner现象)。怎么办?


56

我正在尝试使用50个连续的解释变量来预测二进制结果(大多数变量的范围是到)。我的数据集几乎有24,000行。当我在R中运行时,我得到:glm

Warning messages:  
1: glm.fit: algorithm did not converge  
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

我已阅读过其他建议,可能会发生完美分离,但我确信数据中并非如此(尽管存在准完全分离;如何测试情况是否如此?) 。如果删除一些变量,则“不收敛”错误可能会消失。但这并不总是会发生。

我尝试在bayesglm函数中使用相同的变量,并得到相同的错误。

您将采取什么步骤来弄清楚这里到底发生了什么?您如何找出导致问题的变量?


5
您为什么确信不会发生分离?在bayesglm,他们认为分离是“一个共同的问题,即使当样品尺寸大和预测的数目是小的”
大卫J.哈里斯

2
另一个想法:bayesglm试图通过添加先验来避免分离,但是有24,000行,先验可能会被可能性淹没。尝试收缩prior.scale,可能会大量收缩。还应考虑提高先验的自由度,这将有助于排除与分离有关的较大价值。
戴维·哈里斯

感谢大卫的建议。我不认为发生分离是因为对每个解释变量进行排序时,因解释变量的高或低值,因变量并不总是true或false。除非这被认为是分离的:否则所有x7> 32的因变量都为true,但是在10种情况下x7仅> 32。有没有办法在逻辑回归之外验证分离?还是查看引起分离的变量?我尝试了您的bayesglm建议(我将prior.scale设置为1,将prior.df设置为Inf),但仍然收到Hauck Donner错误。
Dcook


“您如何找出导致问题的变量?” 二进制搜索始终是一个很好的后备。您只有50个变量,因此,如果用一个单独的变量将其完全分开,则会发现6次迭代。如果是两个变量,最坏的情况是最多可以找到49 + 6 = 55次迭代。
smci

Answers:


55

有了如此大的设计空间(!),就可以得到完美的分隔,而不必单独分隔任何变量。我什至同意戴维·哈里斯(David J. Harris)的评论,说这有可能。R50

您可以轻松地测试您的类在设计空间中是否完全分开。这归结为解决线性编程问题。在safeBinaryRegression 包中实现了此“测试”的R实现(不是统计意义上的测试)。

如果事实证明分离确实是问题所在,并且如果您仅对普通使用glm感兴趣(例如,glm不是由更高级别的函数调用而是由您调用),则可以使用一种R实现算法略微修改了经典版本,使其对分离变得“健壮”。它在hlr 包中实现


4
非常酷和有用的答案!我将不得不研究那些软件包。(+1)
彼得·弗洛姆-恢复莫妮卡

1
FWIW下面是对另一种健壮算法的描述:win-vector.com/blog/2012/10/rudie-cant-fail-if-majorized
Alex

2
@Alex:感谢您的链接。如果glm由于启动错误而无法收敛,那么我可以看到这种方法将如何帮助您。另一方面,如果问题是由完美的分离引起的,那我对MM的想法将如何解决还不清楚。我想知道您是否可以对此发表评论(我最终可以将其作为一个单独的问题发布)。
user603 2012年

极好(+1)!我也将不得不研究那些软件包。
jbowman 2012年

1
感谢您的回答@ user603!我使用了safeBinaryRegression,确实发生了一些变量分离。然后,我尝试在hlr软件包中使用MEL来构建对这种分离具有鲁棒性的模型。但是,系数非常大(正常分离时会发生分离),这是df和偏差数:自由度:19112总计(即Null);19063残余空偏差:24990残余偏差:626000 AIC:626000您认为我做错了吗?
Dcook,2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.