预测()#"老鼠"包

时间:2015-02-02 14:54:11

标签: r r-mice

我想使用mice包中的mice函数创建插补策略。问题是我似乎无法在此软件包中找到任何predict方法(或它的表兄弟)。

我想做这样的事情:

require(mice)
data(boys)

train_boys <- boys[1:400,]
test_boys <- boys[401:nrow(boys),]

mice_object <- mice(train_boys)
train_complete_boys <- compete(train_boys)

# Here comes a hypothetical method
test_complete_boys <- predict(mice_object, test_boys)

我想找到一些可以模仿上面代码的方法。 现在,完全可以分别对 train test 数据集进行单独的mice操作,但从逻辑的角度看似乎是不正确的 - 所有您拥有的信息位于 train 数据集中。来自 test 数据集的观察结果不应提供彼此的信息。在处理数据时尤其如此,当观察可以按出现时间排序时。

一种可能的方法是迭代地将 test 数据集中的行添加到 train 数据集,每次都运行插补。然而,这似乎非常不优雅。

以下是问题:

mice包的方法是否与常规predict方法类似?如果没有,可能的解决方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为用另一个估算数据集“预测”缺失值在逻辑上是不正确的,因为MICE算法正在迭代地构建模型,以通过给定数据集中的观察值来估计缺失值。

换句话说,当您执行mice_object <- mice(train_boys)时,算法会根据train_boys 中变量之间的关系来估算和估算NA。但是,此类估算无法应用于test_boy,因为test_boy中的变量之间的关系可能与train_boy中的变量之间的关系不同。此外,这两个数据集之间的观察信息量也不同。

如果您认为变量之间的关系在train_boystest_boys之间是同质的,那么在分割数据集之前如何进行NA插补呢?即:

mice_object <- mice(boys)
complete_boys <- compete(mice_object)
train_boys <- complete_boys[1:400,]
test_boys <- complete_boys[401:nrow(complete_boys),]

如果您需要有关MICE的更多信息,可以阅读Multiple imputation by chained equations: What is it and how does it work?