【问题标题】:partikit predict() returns less rows than input data with missing predictor valuespartikit predict() 返回的行数少于缺少预测变量值的输入数据
【发布时间】:2020-09-02 19:34:17
【问题描述】:

我在使用带有缺失值的数据训练的 partikit 加权条件树模型时遇到问题。

我通过在每个周期为观察值赋予不同的整数权重来手动创建袋装树模型。

但是当我使用自举模型进行预测时,我注意到其中一些模型返回的值少于输入数据行。有趣的是,在输入数据的 299 行中,预测的数据长度为 299 或 289。289 是删除具有缺失数据的预测变量后的行数。

深挖问题,发现是三个组件相互作用引起的:

  • 在模型中使用权重;
  • 预测变量中有缺失数据;
  • 使用字符变量而不是传递给predict() 的输入数据中的因子

如果仅缺少这三个条件之一,则不会出现问题,并且所有树都返回 299 个值。

这是数据:https://www.dropbox.com/s/98oriv2msce4wu5/anonym_data.rds?dl=0 这是重现问题的脚本:https://www.dropbox.com/s/5y7g2dwt2838pbp/test.R?dl=0

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
  • 我尝试在 iris 数据集中随机缺失,其模式与我的数据相似,但我无法重现它
  • 如果没有可重现的例子,很难说发生了什么。另外关于权重:请注意,ctree()weights 参数视为案例权重(也称为频率)权重,因此需要非负整数权重。如果我理解正确,这似乎与您的用法有冲突。
  • 为了制作一个可重复的示例,我需要提供数据,这不是我可以提供的,我将尝试将其匿名化。关于重量,所以不允许使用分数重量?总和到实际的行数。那么 ctree 是如何解释它们的呢? (我使用分数指数权重来执行贝叶斯引导)
  • 我删除了分数权重并将它们转换为整数,但我仍然得到了 286 和 299 个预测行的交替。我会用完整的代码和数据更新问题...

标签: r prediction missing-data party ctree


【解决方案1】:

链接不再有效,但我认为您的意思是 partykit。尽管ctree 模型可以处理缺失数据,但使用predict.party 似乎存在困难。该代码使用对model.frame 的调用,默认na.actionna.fail

我不能说这是否是一个错误,但我觉得这很奇怪,并且可能会解决您看到的问题。可以下载partykit源代码,修改this line,添加选项na.action = na.pass

虽然我希望你在未来 1y 5m 之后不会再遇到这个问题。

【讨论】:

  • 谢谢!!我想我随着时间的推移解决了它,但现在我真的不记得如何......
  • 奇怪的是,如果不使用权重,问题就不会出现
猜你喜欢
  • 2015-08-21
  • 2017-07-09
  • 2020-07-08
  • 2019-05-14
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多