【发布时间】:2020-03-09 02:07:39
【问题描述】:
我正在努力使用老鼠进行插补。主要目标是估算 NA(如果可能,按组)。 由于示例有点大到简单的帖子在这里它是可下载的: https://drive.google.com/open?id=1InGJ_M7r5jwQZZRdXBO1MEbKB48gafbP
我的问题是:
一般而言,相关数据的问题有多大?我该怎么做才能仍然估算数据? 这些数据是实证研究问题的一部分,我还不知道要包括哪些变量,因此最好暂时保留尽可能多的变量。
什么方法比“cart”和“pmm”更合适?我不想简单地估算平均值/中位数......
我可以通过“ID”以某种方式估算数据
调试技巧?
这是我的代码
#Start
require(mice)
require(Hmisc)
'setwd(...)
'test.df<-read.csv(...)
str(test.df)
检查相关性: 前 2 列包含标识符和年份,因此无需查看。
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, ...)
我知道这是一个很长的问题,我很感激每一个小提示或提示!
非常感谢!
【问题讨论】:
-
拟合数据中 NA 的值。例如,这可以通过用数据平均值替换 NA 来完成。 en.wikipedia.org/wiki/Imputation_(statistics)
-
我明白了,谢谢你的解释。我建议在 [stats.stackexchange.com/] 中询问您问题的理论/推理部分,因为他们在统计知识方面有更多经验。
-
我不明白您为什么要排除相关列。如果您想估算值,来自强相关列的信息似乎是最有用的。还是您指的是自相关?然后我建议使用 Amelia 包,它可以在插补模型中包含自相关。
-
您可能想尝试单个插补包(如果您似乎不需要多个插补值)。它们通常更容易使用。例如查看包 missForest、VIM、imputeR。
-
另一条评论:问题确实与强相关变量有关。另请参阅此处stats.stackexchange.com/questions/76488/…。这只是您使用鼠标的默认算法的问题。 (glm)。如果你想继续使用鼠标,你也可以将方法参数设置为另一个算法。
标签: r debugging missing-data imputation r-mice