我想使用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
方法类似?如果没有,可能的解决方法是什么?
谢谢!
答案 0 :(得分:1)
我认为用另一个估算数据集“预测”缺失值在逻辑上是不正确的,因为MICE算法正在迭代地构建模型,以通过给定数据集中的观察值来估计缺失值。
换句话说,当您执行mice_object <- mice(train_boys)
时,算法会根据train_boys
中变量之间的关系来估算和估算NA。但是,此类估算无法应用于test_boy
,因为test_boy
中的变量之间的关系可能与train_boy
中的变量之间的关系不同。此外,这两个数据集之间的观察信息量也不同。
如果您认为变量之间的关系在train_boys
和test_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?。