R MICE填补缺失值无法完成。

5

我对于为什么我的R中的mice包中的插补操作失败感到困惑。我正在尝试使用以下数据框进行非常简单的操作:

dfn <- read.table(text =
"a b c  d
 0 1 0  1
 1 0 0  0
 0 0 0  0
NA 0 0  0
 0 0 0 NA", header = TRUE)

接下来我会使用以下方法来进行简单的平均值插补,具体如下:

imp <- mice(dfn, method = "mean", m = 1, maxit =1)
filled <- complete(imp)

然而,我的完成数据看起来像这样:
filled
#     a b c  d
#1 0.00 1 0  1
#2 1.00 0 0  0
#3 0.00 0 0  0
#4 0.25 0 0  0
#5 0.00 0 0 NA

为什么我仍然会得到这个结尾的NA?这是我能构建的最简单的失败示例,但我的真实数据集要大得多,我只是想了解哪些地方出了问题。任何帮助都将不胜感激!


好的,看起来问题是由于其中一列是其他某些列的完美线性组合所导致的。对于真实数据,有什么处理方法吗? - mjnichol
3
这个问题似乎不适合本论坛,因为它已经在stats.stackexchange.com上发布了:http://stats.stackexchange.com/q/127104/11849 - Roland
@Roland 是的,我也在那里发布了,并且一个用户在评论中给出了问题的原因。 - mjnichol
1个回答

1
我不确定这个翻译是否准确,但是这是我的尝试。尽管method="mean"应该填补无条件均值,但从文档中可以看出,predictorMatrix并没有相应地改变。
通常,剩余的NA是由于预测因子存在多重共线性或每个变量的案例太少(以至于无法估计填补模型)而导致的。然而,method="mean"不应该表现出这种行为。
以下是我的做法:
dfn <- read.table(text="a b c  d
 0 1 0  1
 1 0 0  0
 0 0 0  0
NA 0 0  0
 0 0 0 NA", header=TRUE)

imp <- mice( dfn, method="mean", predictorMatrix=diag(ncol(dfn)) )
complete(imp)

# 1 0.00 1 0 1.00
# 2 1.00 0 0 0.00
# 3 0.00 0 0 0.00
# 4 0.25 0 0 0.00
# 5 0.00 0 0 0.25

您可以使用实际数据集尝试此操作,但应仔细检查结果。例如,请执行以下操作:
sapply(dfn, function(x) mean(x,na.rm=TRUE))

每个变量的均值应该与已被插补的相同。如果这个方法可以解决您的问题,请告诉我。

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