我有一个数据集,其中包含大约12个类别变量,级别范围为2-10,以及其他数字变量。约280条记录。我正在使用mice
中的r
包,使用所有默认设置对丢失的数据进行插补。
但是,当我尝试执行这样的估算时:
imp <- mice(df)
我继续收到此警告:
glm.fit: algorithm did not converge
我在在线here和here上找到的解决方案仅专注于直接使用glm
函数,但就我而言,这是从mice
内部调用的函数。我尝试像这样设置maxit = 50
imp <- mice(df, maxit = 50)
,但是最终得到了更多相同警告的实例。知道是什么原因造成的吗?
答案 0 :(得分:3)
我决定发布问题的答案只是为了展示我是如何解决的,这有点不寻常,并且鉴于我无法找到任何在线解决方案来解决我的问题。
我意识到警告实际上来自logreg
函数(针对只有两个级别的分类变量),而不是来自polyreg
。因此,不仅从glm.fit()
内部调用了mice
函数,而且从logreg
内部调用了函数,我最终在Github上找到了mice
代码,复制logreg
函数,使用glm.fit()
的控制参数编辑maxit
调用,按?mice
“详细信息”部分中的指定重命名,然后使用它。工作正常(经过更多调试后,大声笑),该算法现已收敛。
答案 1 :(得分:2)
mice()
在内部对要估算的每个变量进行回归分析,并默认根据数据类型自动选择一种方法。因此,对于您的分类变量,它选择使用glm.fit()
并且不收敛的多逻辑方法。
要简单地消除错误,您可以为所有变量设置method="pmm"
(预测均值匹配),或者预先将分类变量转换为数字。 但是 ,这可能会导致错误的结果,我强烈建议您考虑一下插补方法,并研究为什么算法无法收敛。
答案 2 :(得分:1)
我遇到了类似的错误,问题是由于某些变量在 predictorMatrix 中完全共线。小鼠建立的模型无法识别;这就是我的问题。为了谷歌的缘故,在此处发布以仔细检查预测矩阵,例如,虚拟变量不共线。删除其中一个级别允许 logreg 方法正常工作。