如何解决因子/字符问题的递归分区
目前我正在使用数据集预测。在此数据中,我已将明确的字符类型变量转换为因子,因为我认为因子比 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_mode
、r_mode
和 in_mode
转换为更适合穷举搜索的二进制拆分的变量。也许,有些变量实际上是有序的?如果是这样,我建议将它们转换为序数因子,或者在 i_mode
的情况下甚至转换为数值变量,因为级别数足够大。或者,您可以针对不同级别创建多个具有不同属性的因子,然后将其用于分区。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。