微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

因子/字符问题的递归分区

如何解决因子/字符问题的递归分区

目前我正在使用数据集预测。在此数据中,我已将明确的字符类型变量转换为因子,因为我认为因子比 glmtree() 代码的字符更有效(如果我错了,请告诉我):

> str(predictions)
'data.frame':   43804 obs. of  14 variables:
$ month        : Factor w/ 7 levels "01","02","03",..: 6 6 6 6 1 1 2 2 3 3 ...
$ pred         : num  0.21 0.269 0.806 0.945 0.954 ...
$ treatment    : Factor w/ 2 levels "0","1": 1 1 2 2 2 2 2 2 2 2 ...
$ type         : Factor w/ 4 levels "S","MS","ML",..: 1 1 4 4 4 4 4 4 4 4 ...
$ i_mode     : Factor w/ 143 levels "AAA","ABC","CBB",..: 28 28 104 104 104 104 104 104 104 104 ...
$ r_mode  : Factor w/ 29 levels "0","5","8","11",..: 4 4 2 2 2 2 2 2 2 2 ...
$ in_mode: Factor w/ 22 levels "XY",..: 11 11 6 6 6 6 6 6 6 6 ...
$ v_mode     : Factor w/ 5 levels "1","3","4","7",..: 1 1 1 1 1 1 1 1 1 1 ...
$ di        : num  1157 1157 1945 1945 1945 ...
$ cont    : Factor w/ 5 levels "AN","BE",..: 2 2 2 2 2 2 2 2 2 2 ...
$ hk          : num  0.512 0.512 0.977 0.977 0.941 ...
$ np           : num  2 2 2 2 2 2 2 2 2 2 ...
$ hd          : num  1 1 0.408 0.408 0.504 ...
$ nd           : num  1 1 9 9 9 9 7 7 9 9 ...

我想估计这种递归分区模型:

library("partykit")
glmtr <- glmtree(formula = pred ~ treatment + 1 | (month+type+i_mode+r_mode+in_mode+v_mode+di+cont+np+nd+hd+hk),data = predictions,maxdepth=6,family = quasibinomial)

我的数据没有任何 NA。但是,出现以下错误(即使在按因素更改字符后):

Error in matrix(0,nrow = mi,ncol = nl) : 
  invalid 'nrow' value (too large or NA)
In addition: Warning message:
  In matrix(0,ncol = nl) :
  NAs introduced by coercion to integer range

有什么线索吗?

谢谢

解决方法

您是对的,glmtree() 和基础 mob() 函数希望拆分变量是名义信息的因素。但是,从计算上讲,这仅适用于具有有限数量级别的因素,因为该算法将尝试将级别数量的所有可能划分为两组。因此,对于您的 i_mode 因素,这需要通过 nl 级和 mi 分为两组:

nl <- 143
mi <- 2^(nl - 1L) - 1L
mi
## [1] 5.575186e+42

在内部,mob() 尝试创建一个矩阵来存储与相应分区模型关联的所有对数似然。这是不可能的,因为这样的矩阵无法表示。 (即使可以,也不会完成所有相关模型的拟合。)不可否认,错误消息不是很有用,应该改进。我们将在包的下一个版本中研究这一点。

为了解决这个问题,我建议将变量 i_moder_modein_mode 转换为更适合穷举搜索的二进制拆分的变量。也许,有些变量实际上是有序的?如果是这样,我建议将它们转换为序数因子,或者在 i_mode 的情况下甚至转换为数值变量,因为级别数足够大。或者,您可以针对不同级别创建多个具有不同属性的因子,然后将其用于分区。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。