【问题标题】:Is it possible to establish splitting criteria in partykit::mob() with a model and then fit a different model to terminal nodes?是否可以使用模型在 partykit::mob() 中建立拆分标准,然后将不同的模型拟合到终端节点?
【发布时间】:2021-10-12 07:04:39
【问题描述】:

有时在使用这个包时,我只想评估一个或另一个参数的异质性。但是,我认为我无法做到这一点,然后一步将更完整的模型拟合到终端节点。有没有办法做到这一点?这是我想要做的代码应该看起来像(我认为),但它不起作用:

full_mod <- 
  function(y, x, weights = NULL, start = NULL, offset = NULL, ...) {
  lm(y ~ x + 1, ...)
  }

tree_1 <- 
  mob(
# assess heterogeneity in slope, ignoring intercepts
    Sepal.Length ~ 0 + Sepal.Width | Species, 
    data = iris,
# fit each terminal node WITH intercepts
    fit = full_mod
    )

这实现了我想要做的,但我正在寻找一个单步的方式。

tree2 <- 
  lmtree(
    Sepal.Length ~ 0 + Sepal.Width | Species, 
    data = iris
    )

iris <- 
  iris %>% 
  mutate(prediction = predict(tree2, type = 'node'))


lms <- iris %>% 
  nest_by(prediction) %>% 
  rowwise() %>% 
  summarize(linear_model = list(lm(Sepal.Length ~ Sepal.Width, data = data)))  

我发现这不是这里使用连续变量的最佳方法,但使用二分预测器时,我认为这可能非常强大,并且想编写一些代码来执行此操作并评估模型的这个变体(只要没有其他方法可以做到)。

在第一次编辑时添加:也许拟合此类模型的另一种方法是基于所选回归参数的同质性(而不是基于整个模型的偏差、对数似然等)来优化拟合。我对这两种解决方案都很满意,但(就个人而言)尝试使用后者时遇到了更多麻烦。

谢谢! 克里斯托弗贷款

【问题讨论】:

    标签: r party


    【解决方案1】:

    mob_control() 中,您可以指定parm 参数。这意味着只有参数的某个子集,比如parm = 2(第二个参数)或parm = "x"x 的系数)会进行参数不稳定性测试。

    然而,问题是一旦选择了一个变量进行拆分,然后通过优化模型的整体目标函数(例如,误差平方和或对数似然等)来搜索最佳拆分点。因此,这将对模型所有参数的所有变化都很敏感。

    全局固定某些参数并仅相对于其他参数进行拆分的更好选择是在以下之间进行迭代:

    1. 根据树中的子组估计(广义)线性模型。
    2. 估计树(及其子组),同时保持模型的全局参数固定。

    这就是 PALM 树算法对部分加性(广义)线性模型所做的事情。它在 R 中的 palmtree 包中实现。有关方法背景,请参阅:Heidi Seibold、Torsten Hothorn、Achim Zeileis (2019)。 “具有全局加性效应的广义线性模型树。” 数据分析和分类进展13(3),703-725。 doi:10.1007/s11634-018-0342-1

    论文中的经验插图的复制提供于:https://www.zeileis.org/news/palmtree/

    【讨论】:

    • 感谢您的详细回复;这非常有用。 PALM 树算法似乎正是我想要的!
    猜你喜欢
    • 2020-12-15
    • 2021-04-14
    • 2016-08-30
    • 2018-02-23
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2019-05-12
    相关资源
    最近更新 更多