我想使用包中的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 <- complete(train_boys)
# Here comes a hypothetical method
test_complete_boys <- predict(mice_object, test_boys)
我想找到一些可以模拟上述代码的方法。现在,完全可以分别对训练数据集和测试数据集执行单独的mice
操作,但从逻辑角度来看,这似乎是不正确的 - 您拥有的所有信息都在训练数据集中。来自测试数据集的观察结果不应相互提供信息。在处理可以按出现时间对观测值进行排序的数据时尤其如此。
一种可能的方法是从测试数据集中添加行以迭代方式训练数据集,每次都运行插补。然而,这似乎非常不优雅。
所以这里有一个问题:
mice
包是否有类似于一般predict
方法的方法?如果没有,有哪些可能的解决方法?
谢谢!
我认为使用另一个插补数据集"预测"缺失值在逻辑上可能是不正确的,因为 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的信息。