mice: glm.fit: 算法没有收敛

mice: glm.fit: algorithm did not converge

我有一个数据集,其中包含大约 12 个级别在 2 - 10 之间的分类变量,以及其他数值变量。约 280 条记录。我正在使用 r 中的 mice 包对所有默认设置的缺失数据执行插补。 但是,当我尝试像这样进行插补时:

imp <- mice(df)

我继续收到此警告:

glm.fit: algorithm did not converge

我在网上找到的解决方案here and here只关注直接使用glm函数,但在我的例子中,它是从mice内部调用的函数。我试过设置 maxit = 50,像这样

imp <- mice(df, maxit = 50)

但最终只会收到更多相同警告的实例。知道是什么原因造成的吗?

mice() 对每个要估算的变量在内部应用回归分析,默认情况下根据数据类型自动选择一种方法。因此,对于您的分类变量,它选择了一种使用 glm.fit() 且不收敛的多分类逻辑方法。

要简单地消除错误,您可以为所有变量设置 method="pmm"(预测均值匹配),或者预先将分类变量转换为数值。 但是, 这可能会导致错误的结果,我强烈建议您仔细考虑您的插补方法并检查为什么算法不会收敛。

我决定 post 我的问题的答案只是为了展示我是如何解决它的,这有点不寻常,并且考虑到 none 我可以在网上找到的解决方案适用于我的情况。

我意识到警告实际上来自 logreg 函数(对于只有 2 个水平的分类变量),而不是来自 polyreg。因此,鉴于 glm.fit() 函数不仅从 mice 中调用,而且从 logreg 中调用,我最终在 Github 上找到了 mice 代码,复制 logreg 函数,使用 maxit 的控制参数编辑 glm.fit() 调用,按照 ?mice 'Details' 部分中的指定重命名它,然后使用它。工作正常(经过更多调试,哈哈),算法现在收敛了。

我遇到了类似的错误,问题出在 predictorMatrix 中某些变量完全共线。老鼠搭建的模型无法辨认;那是我的问题。为了 googler 的缘故在此处发布以仔细检查预测矩阵,例如,虚拟变量不共线。删除其中一个级别可以使 logreg 方法正常工作。