r - 将 mob() 树(partykit 包)与logistic() 模型一起使用
问题描述
我正在尝试将基于模型的递归分区 (MOB) 与 mob() 函数(来自partykit 包)一起使用,以根据使用逻辑回归(glm-二项式)函数。我必须定义我的模型。
按照第 7 页上的示例:https ://cran.r-project.org/web/packages/partykit/vignettes/mob.pdf我创建了一个 logit 函数来估计值并返回逻辑的估计值等( ) 功能。但是,函数的定义似乎并不正确。
library(partykit)
logit_func <- function(y, x, start = NULL, weights = NULL, offset = NULL, ...) {
glm(y ~ 0 + x, family = binomial, start = start, ...)
}
p <- mob(future~., data=sample, fit = logit_func)
...并得到以下错误
Error in model.frame.default(formula = y ~ 0 + x, drop.unused.levels = TRUE) :
invalid type (NULL) for variable 'x'
示例数据框如下:
sample <- structure(list(future = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L), .Label = c("0", "1"), class = "factor"), HHk = c(0.412585987717856,
1, 1, 1, 1, 1, 1, 1, 0.865684350743137, 0.685221125225357), HHd = c(0.529970735028671,
1, 1, 1, 0.611295754192343, 0.171910197073699, 0.722887386610618,
0.457585763978574, 0.517888089662373, 0.401285262785306), via_4 = structure(c(1L,
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("0", "1"), class = "factor"),
region_5 = structure(c(1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L), .Label = c("0", "1"), class = "factor")), row.names = c(NA,
10L), class = "data.frame")
有什么线索吗?
谢谢 :)
解决方案
在您的mob()
通话中,您formula
只有一个 type 右侧y ~ z
- 而不是 type 右侧有一个两部分模型y ~ x | z
。z
变量是用于树中拆分/分区的变量,x
变量是模型中用作回归量的变量。(正如 Álvaro 在回复中已经指出的那样。)
原则上,没有任何回归器是可以的,您可以简单地使用常量拟合(即,仅截距模型)。但是,logit_func()
您定义的并没有捕捉到这种情况。有三种方法可以解决这个问题:
抓住盒子
if(is.null(x))
里面logit_func()
然后使用glm(y ~ 1, ...)
。保持
logit_func()
原样,并明确指定截距的回归:mob(future ~ 1 | ., data=sample, fit = logit_func)
.使用专用
glmtree()
功能而不是一般mob()
加手工制作logit_func()
:glmtree(future ~ ., data = sample, family = binomial)
。
所有这三个都将导致相同的树,但出于多种原因强烈首选策略 3: (a) 它很容易获得,并且不需要创建自定义代码。(b) 内部使用的拟合函数在计算上更有效(例如,避免重复的公式解析等)。(c) 结果树有更好的方法可用,例如,方法中有更好plot()
和更多的选项predict()
。
此外,将一些解释变量视为回归变量而将其他解释变量视为分裂变量可能是有意义的(正如 Álvaro 所建议的那样)。但这取决于数据和应用案例,如果没有进一步的背景,很难提出建议。
您的sample
数据结果如下所示。当然,在这个小数据集上没有发现分裂,但在完整的数据集上,它应该可以按预期工作。
p <- glmtree(future ~ ., data = sample, family = binomial)
p
## Generalized linear model tree (family: binomial)
##
## Model formula:
## future ~ 1 | .
##
## Fitted party:
## [1] root: n = 10
## (Intercept)
## 0.4054651
##
## Number of inner nodes: 0
## Number of terminal nodes: 1
## Number of parameters per node: 1
## Objective function (negative log-likelihood): 6.730117
推荐阅读
- python - 在电报中,一旦显示就获取警报文本
- c# - 将 rtsp 流录制到文件中以供稍后播放
- javascript - 页面加载时触发光标移动事件
- php - 位掩码到数组
- python - 嵌入不发送,我没有错误
- r - 在 R 中转换日期格式 - 奇怪的格式
- android - 运行 flutter clean 后项目抛出 gradle 错误
- javascript - discord.js:TypeError:无法读取未定义的属性“memberCount”
- javascript - 在功能组件中反应原生 typeScript 和 forwardRef
- terraform - 如何在 Terraform 中表示自定义 GCP 机器类型?