【问题标题】:R partykit: How do I use the offset?R partykit:我如何使用偏移量?
【发布时间】:2019-07-15 10:39:00
【问题描述】:

我正在尝试预测结果的频率,并且我有很多数据。我已经为数据安装了 glm,现在我正在尝试使用 ctree 来了解我可能错过的数据集中的任何复杂交互。

我没有直接预测残差,而是尝试将 ctree 模型偏移到 glm 预测。但是,当我执行以下操作时,我似乎得到了相同的结果:(a) 根本不使用偏移量,(b) 在函数中指定偏移量,以及 (c) 在 ctree 方程中使用偏移量。

我曾尝试查看文档(herehere),但没有发现它有帮助。

我创建了一些虚拟数据来模仿我正在做的事情:

library(partykit)

# Set random number seed
set.seed(15)

# Create Dataset
freq <- rpois(10000, 1.2)
example_df <- data.frame(var_1 = rnorm(10000, 180, 20) * freq / 10,
                        var_2 = runif(10000, 1, 8),
                        var_3 = runif(10000, 1, 2.5) + freq / 1000)
example_df$var_4 = example_df$var_1 * example_df$var_3 + rnorm(10000, 0.1, 0.5)
example_df$var_5 = example_df$var_2 * example_df$var_3 + rnorm(10000, 2, 50)

# Create GLM
base_mod <- glm(freq ~ ., family="poisson", data=example_df)
base_pred <- predict(base_mod)

# Create trees
exc_offset <- ctree(freq ~ ., data = example_df, control = ctree_control(alpha = 0.01, minbucket = 1000))
func_offset <- ctree(freq ~ ., data = example_df, offset = base_pred, control = ctree_control(alpha = 0.01, minbucket = 1000))
equ_offset <- ctree(freq ~ . + offset(base_pred), data = example_df, control = ctree_control(alpha = 0.01, minbucket = 1000))

我预计当包含偏移量和不包含偏移量时,树的结果会有所不同。但是,输出似乎是相同的:

# Predict outcomes
summary(predict(exc_offset, example_df))
summary(predict(func_offset, example_df))
summary(predict(equ_offset, example_df))

# Show trees
exc_offset
func_offset
equ_offset

有人知道发生了什么吗?我应该使用偏移量吗?

【问题讨论】:

    标签: r offset party ctree


    【解决方案1】:

    ctree() 算法不是基于线性预测器,因此无法直接包含偏移量。不过,可以使用基于模型的ytrafo 分数来包含偏移量。有关更多详细信息,请参阅 vignette("ctree", package = "partykit")(也可在 CRAN 上的 https://CRAN.R-project.org/web/packages/partykit/vignettes/ctree.pdf 获得)。

    但是,更自然的解决方案是使用带有 glmtree() 函数的基于 GLM 模型的树。我认为您尝试适应这棵树:

    glmtree(freq ~ ., data = example_df, offset = base_pred, family = poisson,
      alpha = 0.01, minsize = 1000)
    

    请参阅vignette("mob", package = "partykit") 了解更多详情(也可在 CRAN 上的https://CRAN.R-project.org/web/packages/partykit/vignettes/mob.pdf 获得)。

    但不是估计一次偏移然后估计一次树,也可以很容易地迭代这个过程以获得更好的拟合。我们将此称为 PALM 树(部分加性线性树),可在 palmtree 包 (https://doi.org/10.1007/s11634-018-0342-1) 中找到。

    最后,我鼓励您探索哪些可用的协变量被用作:

    • 偏移量中的回归量(全局回归量)
    • 每个节点中的回归器(本地回归器)
    • 拆分变量

    当每个协变量的正确部分时,生成的模型可能更易于解释。

    【讨论】:

    • 感谢您的详细回复。不幸的是,由于商业限制,我认为我们不能使用它。但这个答案可能对其他人有帮助。
    • 这是什么意思?您可以随意使用partykit::ctree,但不能使用partykit::glmtree?然后,另一种解决方案是使用ctreeglm(而不是freq)的残差进行建模。
    • 限制令人沮丧;我最终对残差进行了建模。谢谢。
    猜你喜欢
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2015-11-24
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 2015-05-27
    相关资源
    最近更新 更多