“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() 方法的主要内容,如果未能解决你的问题,请参考以下文章

R语言DALEX包的explain函数生成指定分类预测机器学习模型解释器predict_parts函数基于breakdown方法分析对于指定的某一条样本(实例观察)每个变量对于预测结果的贡献大小

R语言使用DALEX包的explain函数生成指定分类预测机器学习模型的解释器predict_parts函数基于shap方法分析对于指定的某一条样本(实例观察)每个变量对于预测结果的贡献大小

使用通过 MICE 进行多重插补开发的模型预测新观察结果的响应

R 笔记 MICE

R语言使用caret包的predict函数对模型在测试集上的表现进行推理和预测predict函数对测试数据集进行数据预处理(和训练集的初始方式保持一致):缺失值填充数值变量最小最大缩放独热编码

R语言使用cmprsk包的crr函数进行生存资料的多因素竞争风险分析使用predict.crr函数进行多因素竞争风险模型的预测推理分析