我想使用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)
我想找到一些可以模仿上面代码的方法。
现在,完全有可能对火车和测试数据集分别进行单独的
mice
操作,但是从逻辑的角度来看,这似乎是不正确的-您拥有的所有信息都在火车数据集中。来自测试数据集的观察结果不应相互提供信息。当处理数据时,可以根据出现的时间对观察进行排序,这尤其如此。一种可能的方法是从测试数据集中添加行以迭代地训练数据集,每次都运行插补。但是,这似乎非常微不足道。
所以这是问题:
mice
包中是否有一种类似于一般predict
方法的方法?如果没有,可能的解决方法是什么?谢谢!
最佳答案
我认为用另一个估算数据集“预测”缺失值在逻辑上是不正确的,因为MICE算法正在迭代构建模型,以便根据给定数据集中的观测值估算缺失值。
换句话说,当您执行mice_object <- mice(train_boys)
时,该算法会根据train_boys
中变量之间的关系来估计并估算NA。但是,由于test_boy
中的变量之间的关系可能与test_boy
中的变量之间的关系不同,因此无法将这种估计应用于train_boy
。同样,这两个数据集之间观察到的信息量也不同。
如果您相信train_boys
和test_boys
之间的变量之间的关系是同质的,那么在分割数据集之前进行NA插补怎么样? IE。:
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?。
关于r - "mice"包的predict()方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28280416/