是否可以在 partykit::mob() 中用模型建立分裂标准,然后将不同的模型拟合到终端节点?
Is it possible to establish splitting criteria in partykit::mob() with a model and then fit a different model to terminal nodes?
有时在使用这个包时,我只想评估一个或另一个参数的异质性。但是,我不认为我可以做到这一点,然后一步将更完整的模型拟合到终端节点。有没有办法做到这一点?这是我想做的代码应该是这样的(我认为),但它不起作用:
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)))
我发现这不是连续变量的最佳方法,但对于二分预测变量,我认为这可能非常强大并且想编写一些代码来执行此操作并评估模型的这种变体(如只要没有其他方法可以做到。
在第一次编辑时添加:也许拟合此类模型的另一种方法是根据所选回归参数的同质性(而不是整个基于模型的偏差、对数似然等)优化拟合。我对这两种解决方案都很满意,但(就个人而言)在尝试采用后者时遇到了更多麻烦。
谢谢!
克里斯托弗·洛恩
在 mob_control()
中您可以指定 parm
参数。这意味着只有参数的某个子集,比如 parm = 2
(第二个参数)或 parm = "x"
(x
的系数)接受参数不稳定性测试。
然而,要注意的是,一旦选择了一个变量进行拆分,就会通过优化整个 objective 函数(例如误差平方和或对数似然等)来搜索最佳拆分点。模型的。因此,这将对模型所有参数的所有变化都很敏感。
全局固定某些参数并仅相对于其他参数拆分的更好替代方法是在以下项之间迭代:
- 给定树中的子组估计(广义)线性模型。
- 估计树(及其子组),同时保持模型的全局参数固定。
这就是 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/
有时在使用这个包时,我只想评估一个或另一个参数的异质性。但是,我不认为我可以做到这一点,然后一步将更完整的模型拟合到终端节点。有没有办法做到这一点?这是我想做的代码应该是这样的(我认为),但它不起作用:
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)))
我发现这不是连续变量的最佳方法,但对于二分预测变量,我认为这可能非常强大并且想编写一些代码来执行此操作并评估模型的这种变体(如只要没有其他方法可以做到。
在第一次编辑时添加:也许拟合此类模型的另一种方法是根据所选回归参数的同质性(而不是整个基于模型的偏差、对数似然等)优化拟合。我对这两种解决方案都很满意,但(就个人而言)在尝试采用后者时遇到了更多麻烦。
谢谢! 克里斯托弗·洛恩
在 mob_control()
中您可以指定 parm
参数。这意味着只有参数的某个子集,比如 parm = 2
(第二个参数)或 parm = "x"
(x
的系数)接受参数不稳定性测试。
然而,要注意的是,一旦选择了一个变量进行拆分,就会通过优化整个 objective 函数(例如误差平方和或对数似然等)来搜索最佳拆分点。模型的。因此,这将对模型所有参数的所有变化都很敏感。
全局固定某些参数并仅相对于其他参数拆分的更好替代方法是在以下项之间迭代:
- 给定树中的子组估计(广义)线性模型。
- 估计树(及其子组),同时保持模型的全局参数固定。
这就是 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/