【问题标题】:Error in missing value imputation using MICE package使用 MICE 包进行缺失值插补的错误
【发布时间】:2016-11-19 07:20:31
【问题描述】:

我有一个巨大的数据(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 万个观测值运行它。然后我尝试使用输出来估算整个数据。

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

【问题讨论】:

    标签: r missing-data r-mice imputation


    【解决方案1】:

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

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

    【讨论】:

    • 是否有任何软件包可以做我想做的事情?
    • @SonuMishra 那么您可以做的是继续使用glm 或随机森林之类的东西拟合统计模型,然后使用它来预测缺失值。或者只使用平均插补,这要快得多。您可以使用 RRF 包的函数 na.roughfix 来实现。
    • @hack-R 在我看来,这些建议非常糟糕。 mice 使用 EM,它是非常优于 GLM 的插补策略。也就是说,除非您指的是通过 GLM 收敛到解决方案的迭代算法;但这与 EM 并没有太大区别。
    • @Alex 好吧,很抱歉你有这种感觉,也许是因为无知和缺乏经验。首先,您将一些实用的替代方案与计算资源要求不可行的东西进行比较。其次,您提出了强有力的主张,没有任何支持。
    【解决方案2】:

    micehmisc 均未提供来自插补过程的参数估计值。 AmeliaimputeMulti 都可以。在这两种情况下,您都可以提取参数估计值并将它们用于估算您的其他观察值。

    • 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,我正在等待回复,然后再将小插图添加到包中。

    【讨论】:

    • 一个非常糟糕的答案恕我直言。祝你好运,尝试使用具有这种大小数据的高质量 Amelia 模型。顺便说一句,我已经发表的评论很好地描述了使用多项式模型的方法,它本质上是一个具有多项分布的 GLM,正如您在 multinommlogit 中发现的那样。
    猜你喜欢
    • 1970-01-01
    • 2020-02-04
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多