R语言partykit包中lmtree模型是否支持surrogate splitting代理拆分
lmtree代理拆分支持情况说明
截至partykit最新稳定版本,基于模型的递归划分函数lmtree()原生不支持代理拆分功能,和支持该特性的条件推断树ctree()存在差异。
两者缺失值处理逻辑的差异来自底层框架的设计区别:
ctree()的拆分逻辑优先计算所有划分变量与因变量的关联显著性,代理拆分的核心是采用和最优拆分变量相关性最高的其他非缺失划分变量完成样本拆分,天然适配缺失值场景lmtree()基于MOB(Model-based Recursive Partitioning)框架开发,拆分前需要对每个节点的模型参数做全划分变量的稳定性检验,该检验要求所有划分变量在当前节点样本上均有完整观测值,因此原生实现默认对所有划分变量执行完整个案剔除,只要有一个划分变量缺失就排除整行样本。
可行替代方案
- 方案1:缺失值预处理。对分类划分变量新增独立的
"缺失"分组,对连续划分变量使用多重插补方法补全后再传入lmtree()估计,是目前门槛最低的通用解决方案。 - 方案2:改用带代理拆分的
ctree()实现近似的线性模型树效果。通过设置ytrafo参数适配线性模型的参数检验逻辑,同时在ctree_control()中设置maxsurrogate参数开启代理拆分,最终输出的树结构和lmtree()的拟合效果接近。 - 方案3:自定义MOB拆分函数。如果必须使用原生MOB框架,可以自行改写
mob_control中的拆分检验逻辑,兼容带缺失值的划分变量,但该方法需要熟悉partykit的底层代码实现,门槛较高。
内容的提问来源于stack exchange,提问作者Giovi
相关产品推荐
相关产品推荐

