“mice”包的 predict() 方法

Posted

技术标签:

【中文标题】“mice”包的 predict() 方法【英文标题】:predict() method for "mice" package 【发布时间】:2015-04-01 13:22:09 【问题描述】:

我想使用 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)

我想找到一些可以模拟上述代码的方法。 现在,完全有可能对 traintest 数据集分别进行单独的 mice 操作,但从逻辑的角度来看,这似乎是不正确的 - 所有信息你在 train 数据集中。 test 数据集的观察结果不应相互提供信息。在处理数据时尤其如此,因为观察可以按出现时间排序。

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

那么问题来了:

mice 包是否有类似于一般predict 方法的方法?如果不是,有哪些可能的解决方法?

谢谢!

【问题讨论】:

你得到这个问题的答案了吗? 不,还没有)我想再过一年可能会有所帮助。 很多人都在寻找这个问题的答案! 在此处添加问题:github.com/stefvanbuuren/mice/issues 【参考方案1】:

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

换句话说,当您执行mice_object &lt;- 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?。

【讨论】:

以上是关于“mice”包的 predict() 方法的主要内容,如果未能解决你的问题,请参考以下文章