我在使用MICE进行缺失值插补时遇到了困难。目标是尽可能地按组来插补缺失值。由于样本有点大,无法简单地在这里发布,您可以下载查看:
https://drive.google.com/open?id=1InGJ_M7r5jwQZZRdXBO1MEbKB48gafbP
我的问题如下:
一般情况下,相关数据会带来多大的问题?我该如何仍然插补数据? 该数据是一个实证研究问题的一部分,我还不知道应该包括哪些变量,因此最好在这段时间内尽可能保留更多的变量。
有什么比“cart”和“pmm”更适合的方法?我不想简单地插补均值/中位数....
我能否按“ID”插补数据?
调试技巧?
#Start
require(mice)
require(Hmisc)
'setwd(...)
'test.df<-read.csv(...)
str(test.df)
检查相关性: 前两列包含标识符和年份,因此无需深入研究。
test.df.rcorr<-rcorr(as.matrix(test.df[,-c(1:2)]))
test.df.coeff<-test.df.rcorr$r
test.df.coeff<-corrplot(test.df.coeff)
可以看到数据中存在一些强相关性。对于简单的任务,请省略具有强相关性的所有列。
#Simple example
test.df2<-test.df[,-c(4,7,10,11)]
test.df2
sum(is.na(test.df2))
现在,让我们对test.df2进行填补,而不指定方法:
imputation.df2<-mice(test.df2, m=1, seed=123456)
imputation.df2$method
test.df2.imp<-mice::complete(imputation.df2)
Warning message:
Number of logged events: 1
sum(is.na(test.df2.imp))
可以看到,所有的NA值都被填充了。所使用的方法仅为“pmm”。
在使用完整数据集时,我几乎立即收到以下错误消息:
imputation.df<-mice(test.df,m=1,seed = 66666)
iter imp variable
1 1 x1Error in solve.default(xtx + diag(pen)) :
system is computationally singular: reciprocal condition number = 1.49712e-16
这是否只是数据相关性引起的呢?
最后,我的按ID插值的代码会在显示此错误之前运行更长时间:
test123<- lapply(split(test.df, test.df$ID), function(x) mice::complete(mice(x, m = 1 ,seed = 987654)))
Error in edit.setup(data, setup, ...) : nothing left to impute
In addition: There were 19 warnings (use warnings() to see them)
Called from: edit.setup(data, setup, ...)
我知道这是一个很长的问题,我非常感谢每一个小提示或暗示!
非常感谢!