R partykit:如何使用偏移量?

时间:2019-07-15 10:39:00

标签: r offset party ctree

我正在尝试预测结果的频率,并且我有很多数据。我已经对数据进行了详细分析,现在我正尝试使用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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

有关更多详细信息,请参见vignette("mob", package = "partykit")(也可以在https://CRAN.R-project.org/web/packages/partykit/vignettes/mob.pdf的CRAN上找到)。

而不是一次估计偏移量,然后一次估计树,还可以轻松地迭代此过程以获得更好的拟合度。我们将这种PALM树(部分加法线性树)称为palmtree包(https://doi.org/10.1007/s11634-018-0342-1)。

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

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

也许每个协变量的正确部分都可以更好地解释结果模型。