1

我有大量(4M x 17)缺失值的数据。两列是分类的,其余的都是数字的。我想使用 MICE 包进行缺失值插补。这是我尝试过的:

> testMice <- mice(myData[1:100000,]) # runs fine  
> testTot <- predict(testMice, myData)
Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "mids"

在整个数据集上运行插补计算成本很高,所以我只在前 10 万个观测值上运行它。然后我尝试使用输出来估算整个数据。

我的方法有什么问题吗?如果是,我应该怎么做才能使它正确?如果不是,那么为什么我会收到此错误?

4

2 回答 2

2

既不mice也不hmisc提供来自插补过程的参数估计。两者Amelia兼而有之imputeMulti。在这两种情况下,您都可以提取参数估计值并将它们用于估算您的其他观察值。

  • Amelia假设您的数据以多元正态分布(例如 X \sim N(\mu, \Sigma)。
  • imputeMulti假设您的数据分布为多元多项式分布。也就是说,完整的细胞计数是分布的 (X \sim M(n,\theta)),其中 n 是观察次数。

拟合可以通过示例数据如下完成。检查参数估计值如下所示。

library(Amelia)
library(imputeMulti)
data(tract2221, package= "imputeMulti")
test_dat2 <- tract2221[, c("gender", "marital_status","edu_attain", "emp_status")]
# fitting
IM_EM <- multinomial_impute(test_dat2, "EM",conj_prior = "non.informative", verbose= TRUE)
amelia_EM <- amelia(test_dat2, m= 1, noms= c("gender", "marital_status","edu_attain", "emp_status"))
  • 函数的参数估计值在和amelia中找到。amelia_EM$muamelia_EM$theta
  • 中的参数估计值可在imputeMulti中找到IM_EM@mle_x_y并可通过该get_parameters方法访问。

imputeMulti相对于其他 3 个包中的任何一个,分类数据的插补精度明显更高,尽管它只接受多项式(例如factor)数据。

所有这些信息都在当前未发布imputeMulti. 该论文已提交给 JSS,我正在等待回复,然后再将小插图添加到包中。

于 2016-07-16T21:25:48.037 回答
1

你不使用predict()with mice。这不是你适合的模型本身。100,000 行的估算结果已经存在。

如果您想要所有行的数据,那么您必须将所有行放入mice. 不过我不推荐它,除非您将它设置在具有数十个 CPU 内核的大型集群上。

于 2016-07-16T04:11:54.420 回答