在R中使用MICE填补数据,数据集仍然存在NA值

10
在运行MICE软件包后,每个完整的插补集中的缺失值数量从147428减少到46093。但是应该是0个NA才对吧?感谢您!以下是我的MICE代码:
imp = mice(newdata)

imputationSet1 = complete(imp)
imputationSet2 = complete(imp,2)
imputationSet3 = complete(imp,3)
imputationSet4 = complete(imp,4)
imputationSet5 = complete(imp,5)

我有一个类似的问题在http://stackoverflow.com/questions/25472640/leftover-nas-after-imputing-using-mice,但我的问题有一个可行的示例。 - Jameson Quinn
1
你应该提供一些关于数据集的信息。有多少变量?有多少个案例?这些是什么变量?很可能老鼠无法完全适应插补模型。有些情况下可能没有足够的数据可以被插补。最后,可能是两者的结合。 - SimonG
1
如果缺失值的数量相对于已知值来说非常大,那么该方法可能根本无法收敛,最终仍会产生NA值! - Ehsan M. Kermani
4个回答

10

Ben,mice()函数检测到多重共线性并通过删除一个或多个矩阵中的预测变量来解决问题。每次移除都在mids对象的loggedEvents元素中记录。例如:

imp <- mice(cbind(nhanes, chl2 = 2 * nhanes$chl), print = FALSE)

imp$loggedEvents

告诉我们在迭代之前删除了重复的变量chl2。该算法还会在迭代过程中检测到多重共线性。

另一种控制算法的方法是岭参数。岭参数指定为mice()的一个参数。将ridge=0.001或ridge=0.01设置使算法更加健壮,但会以牺牲精确度为代价。

在终端节点,我们可以应用像mice.impute.sample()这样的简单方法,它本身不需要任何预测变量。

这些信息摘自Stef van Buuren的书Flexible Imputation of Missing Data,第129页。


5

我的建议是将字符型变量转换为因子型变量,这样缺失值就会从填补后的数据集中消失。


2
尝试添加一个名为threshold的额外参数,其默认值为0.999。如果将其设置为接近1甚至更大的值,则您的问题应该会消失。
但要注意,只有在数据中存在高共线性时才会出现此问题。

1
附加参数的名称是什么?在你的答案中显示为空格。 - Paul de Barros

-1

是的,不应该有遗失值了。

我猜你的数据集中有一些行的遗失值太多了,以至于mice的插补模型都无法处理。你的数据集中是否有每个值都缺失的行?这可能会导致这种情况发生。

另一个尝试的方法 - 将迭代次数增加到15:imp = mice(newdata, maxit = 15)。这样能改变什么吗?


1
增加迭代次数只对自相关和不收敛的问题有效。即使每个插补有15次迭代,考虑到其他软件包的表现,也并不算多。mice算法非常高效,并且令人惊讶地没有这些问题,因为在每次迭代中,目标变量中(填充的)缺失值未用于拟合模型(仅用于协变量)。因此,在mice中,迭代次数并不是一个问题。我认为你提出的另一点很有道理,但我认为这并不是唯一的解释(请参见Q的评论)。 - SimonG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接