【问题标题】:Has anyone tried to parallelize multiple imputation in 'mice' package?有没有人试图在“老鼠”包中并行化多重插补?
【发布时间】:2014-09-29 08:04:19
【问题描述】:

我知道Amelia R 包为并行 多重插补(MI)提供了一些支持。但是,对我研究数据的初步分析表明,该数据不是 多元正态,所以很遗憾,我不能使用Amelia。因此,我转而使用miceR 包进行 MI,因为该包可以对非多元正态数据执行 MI。

由于通过mice 的 MI 过程非常慢(目前我正在使用 AWS m3.large 2-core 实例),我开始怀疑是否可以并行化该过程以节省处理时间。根据我对mice 文档和相应的JSS 论文以及mice 的源代码的审查,目前该包似乎不支持并行操作。这很可悲,因为恕我直言,MICE 算法自然是并行的,因此,它的并行实现应该相对容易,并且会显着节省时间和资源。

问题: 有没有人尝试在 mice 包中并行化 MI,无论是在外部(通过 R 并行设施)还是在内部(通过修改源代码),如果任何?谢谢!

【问题讨论】:

  • 试试更快的 R HmiscaregImpute 函数。首先,指定连续变量的所有影响都是线性的(这是mice 假设的)。
  • @FrankHarrell:非常感谢您的建议,Harrell 博士!我快速浏览了Hmisc 文档中建议的函数的描述。描述对我来说似乎有点压倒性(可能是由于我对主题的了解有限),另外我注意到mice 现在有fastpmm 方法,我猜它等于@987654338 中的对应方法@。即使我最终不会使用aregImpute(),我相信我会使用你惊人的Hmisc 包中的一些其他功能。最好的祝愿,亚历克斯。

标签: r parallel-processing r-mice


【解决方案1】:

最近,我尝试在外部通过mice 包并行化多重插补(MI),即通过使用R 多处理设施,特别是parallel 包,它来自R 基本分布的标准。基本上,解决方案是使用mclapply() 函数分配预先计算的所需 MI 迭代总数的份额,然后将生成的估算数据组合到单个对象中。 在性能方面,这种方法的结果超出了我最乐观的预期:处理时间从 1.5 小时减少到 不到 7 分钟(! )。那只是在两个核心上。我已经删除了一个多级因素,但它应该不会有太大影响。无论如何,结果令人难以置信!

【讨论】:

  • 这些结果听起来令人印象深刻,但除非你有大约 12 个内核,否则它有点 too good to be true。有一些与并行化相关的开销,因此这些收益很可能是由其他一些促成因素造成的。无论如何,我已经写了一个简短的方法来解决这个相关问题stackoverflow.com/questions/24040280/…
  • @MaxGordon:感谢您的评论。我分享的结果确实是真的。我希望你不要指责我不诚实,这1)不是我的风格; 2) 我没有理由说谎。目前我还不清楚特定加速是仅使用mclapply()还是加上一些未考虑因素的结果。目前,我有更紧迫的任务要处理。话虽如此,您的参考资料看起来很有趣,当我有更多时间时,我一定会详细审查它们。
  • 对不起,你当然是实话实说。我的观点很简单,如果大多数人拥有 4-8 核的通用设置,他们就不应该期望这种加速。我的猜测是两者之间可能有一些因素发生了变化,我不确定为什么 mclapply 会自己这样做。
  • @MaxGordon:没问题,谢谢!我同意你的看法。仅供参考,这种加速发生在 m3.large Amazon EC2 实例上,它只有 2 核。顺便说一句,我快速浏览了您有趣的博客和漂亮的gmisc 包。目前有两个函数看起来特别吸引我:htmlTablegetDescriptionsStatsBy。我什至可能会在某个时候尝试它们。最好的祝愿,亚历克斯。
猜你喜欢
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 2016-02-03
  • 2020-03-08
  • 2011-08-10
相关资源
最近更新 更多