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 方法正常工作。
我有一个数据集,其中包含大约 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 方法正常工作。