我有一个巨大的数据(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"
在整个数据集上运行估算是计算上昂贵的,所以我仅在前100K观测值上运行它。然后我试图使用输出来估算整个数据。
我的方法有什么问题吗?如果是,我该怎么做才能使其正确?如果不是,那么为什么我会收到此错误?
答案 0 :(得分: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$mu
和amelia_EM$theta
中找到。 imputeMulti
中的参数估算值可在IM_EM@mle_x_y
中找到,可通过get_parameters
方法访问。 imputeMulti
对于其他3个包中的任何一个包的分类数据具有明显更高的插补准确度,尽管它只接受多项(例如factor
)数据。
所有这些信息都在imputeMulti
的当前未发布的插图中。该论文已提交给JSS,我正在等待回复,然后将晕影添加到包中。
答案 1 :(得分:1)
您不会将predict()
与mice
一起使用。它本身并不适合您的模型。您的推算结果已经存在100,000行。
如果您想要所有行的数据,则必须将所有行放在mice
中。我不建议这样做,除非你在具有几十个CPU核心的大型集群上进行设置。