如何改善R MICE数据插补的运行时间


9

简而言之,我的问题是:有没有什么方法可以改善R MICE(数据插补)的运行时间?

我正在使用一个数据集(30个变量,130万行),该数据集包含(随机)丢失的数据。30个变量中约15个变量中约有8%包含NA。为了估算丢失的数据,我运行了MICE函数,该函数是MICE软件包的一部分。

我使用method =“ fastpmm”和m = 1甚至在一个子集(100,000行)上都经历了非常慢的运行时间,并且运行了大约15分钟。

有没有一种方法可以改善运行时间而又不会损失太多性能?(mice.impute.mean速度非常快,但是会带来大量的信息丢失!)。

可复制的代码:

library(mice)
df <- data.frame(replicate(30,sample(c(NA,1:10),1000000,rep=TRUE)))
df <- data.frame(scale(df))

output <- mice(df, m=1, method = "fastpmm")

1
通常:这类问题是否适合交叉验证,或更适合于堆栈溢出?
Dendrobates

3
这可能是一个判断电话。因为(作为一般原则)运行时间的最实质性改善是通过了解底层算法而获得的,所以我希望您可能会在一个社区中(人们可能会建议其他方法)获得真正有效答案的最佳机会。如果您在一两天内没有得到足够的答案,则只需将该帖子标记为可迁移,我们会将其发送给SO(以及在此期间可能收集到的所有答案和评论)。
whuber

1
您可以将'fastppm'选项更改为'norm',它将更快
marc1s 2016年

1
Thx @ marc1s,对于大型数据集确实有很多改进。对于具有10,000行的随机数据帧(如上所述),“规范”方法比“ fastpmm”快约4倍。50,000行的速度甚至快了12倍。因此,运行时间的相对增益随着行数的增加而增加。
Dendrobates

1
根据要运行的模型,使用最大似然(或全信息最大似然)估计可能更快,如果正确指定了模型,则估计在渐近上等同于估算。这是我参与的一篇论文,比较了不同的方法:emeraldinsight.com/doi/abs/10.1108/JCP-02-2015-0007
Jeremy Miles

Answers:


4

您可以使用quickpred()from mice软件包,通过指定mincor(最小相关)和minpuc(可用案例的比例)来限制预测变量。您也可以使用exclude和include参数来控制预测变量。


2

我做了一个包装程序mice包括一个额外的参数,功能droplist,在那里你可以传递你的预测变量的特征向量希望在估算公式的右手侧使用。这是为了提高速度,因为我发现具有多个级别的因子变量会大大减慢插补的速度。我不知道quickpred@Aanish引用的功能,也许您可​​以同时使用这两个概念。

以下是在我的glmmplus软件包中显示的功能。如果您觉得有用,则可以在实际的mice包装中打开拉取请求。

ImputeData <- function(data, m = 10, maxit = 15, droplist = NULL) {
  if (length(intersect(names(data), droplist)) < length(droplist)) {
    stop("Droplist variables not found in data set")
  }
  predictorMatrix <- (1 - diag(1, ncol(data)))
  for (term in droplist) {
  drop.index <- which(names(data) == term)
    predictorMatrix[, drop.index] <- 0
  }
  mids.out <- mice(data, m = m, maxit = maxit,
                   predictorMatrix = predictorMatrix)
  return(mids.out)
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.