【问题标题】:lmtree suspect behavior with factorslmtree 怀疑行为与因素
【发布时间】:2018-06-26 13:16:00
【问题描述】:

当我将它与因子一起使用时,我注意到partykit 包中的 lmtree 函数有一个奇怪的行为。如果数据集中不包含某些级别(此处为“c”和“e”),则预测会随机变化......

我猜这意味着 lmtree 仅使用数据集中存在的因素(本例中的“a”和“b”)构建模型,而预测函数考虑了所有因素(“a”、“b”、 c","e")。

那么如何在 lmtree 模型中安全地使用因子?

library(partykit)

df<-data.frame(x=runif(100),y=runif(100),v=sample(c("a","b"),100,replace=T))
df$z<-with(df,ifelse(v=="a",2*y+x,3*x-y))
df$v<-factor(df$v,levels=c("c","e","a","b"))

lmt<-lmtree(z~x+y|v,df)

for (i in 1:10) print(predict(lmt,df,type="node")[1])

如果 lmtree 函数和 predict 函数之间的因子顺序颠倒(从 levels=c("a","b") 更改为 levels=c("b","a") )

【问题讨论】:

  • lmtree 在什么包中? (请在您的问题中包含此信息...)
  • @BenBolker :来自partykit 包

标签: r partitioning party


【解决方案1】:

感谢您提出这个问题,这是partykit 中的一个错误(直到当前版本 1.2-2)。

问题的根源如下:lmtree() 采用 formuladata 并从中构建 model.frame,设置 drop.unused.levels = TRUE。因此,对于v,只有级别"a""b" 被保留,"c""e" 被删除。但是,在predict.party完成了相同的操作,其中在调用model.frame 时未指定drop.unused.levels,因此使用默认的FALSE。然后因子水平之间存在不匹配,导致随机分配。

我将与 Torsten 协调一个固定版本!同样的问题似乎潜伏在其他地方,所以我们需要先做更多的检查。

同时,避免这种情况的最佳方法是在调用lmtree(或partykit 中似乎有相同问题的其他函数)之前删除未使用的级别。

【讨论】:

  • 感谢您的回复。我会等待更新的版本!
猜你喜欢
  • 2018-12-23
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 2018-10-18
  • 2018-10-04
  • 2017-10-01
  • 2016-09-06
相关资源
最近更新 更多