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

ctree忽略具有非语法名称的变量?

如何解决ctree忽略具有非语法名称的变量?

我想知道partkykit::ctree函数是否忽略具有非语法名称的变量还是我遗漏了什么?

玩具示例:

myData<-data.frame(
   Y = factor(rep(LETTERS[1:3],each=10)),x1 = 1:30,x2 = c(1:10,2:11,3:12)
 )

显然x1Y的最佳“预测变量”:

ctree(Y~.,data=myData)

Model formula:
Y ~ x1 + x2

Fitted party:
[1] root
|   [2] x1 <= 10: A (n = 10,err = 0,0%)
|   [3] x1 > 10
|   |   [4] x1 <= 20: B (n = 10,0%)
|   |   [5] x1 > 20: C (n = 10,0%)

Number of inner nodes:    2
Number of terminal nodes: 3

但是当我将其名称更改为非语法名称时,它似乎在树构建过程中被忽略了:

 myData<-data.frame(
   Y = factor(rep(LETTERS[1:3],`x 1` = 1:30,3:12),check.names = F
 )
 
ctree(Y~.,data=myData)

Model formula:
Y ~ `x 1` + x2

Fitted party:
[1] root: A (n = 30,err = 66,7%) 

Number of inner nodes:    0
Number of terminal nodes: 1

您能提出任何克服这种行为的方法吗('cos我真的非常希望使用x 1作为名称,不要问为什么)?

解决方法

感谢您指出这一点。这确实是partykit::ctree中的错误,但现已在1.2-11版(R-Forge的当前开发版本)中得到修复。

此外,如果您只想在打印和绘图中使用非语法标签,则可以使用以下快速而又肮脏的解决方法:首先学习具有良好语法名称的数据。

myData <- data.frame(
  Y = factor(rep(LETTERS[1:3],each = 10)),x1 = 1:30,x2 = c(1:10,2:11,3:12)
)
ct <- ctree(Y ~ .,data = myData)

然后在对树进行拟合之后,更改存储在树中的$data中的变量名称。

names(ct$data)[2] <- "x 1"

然后将其用于打印和绘图。

print(ct)
## Model formula:
## Y ~ x1 + x2
## 
## Fitted party:
## [1] root
## |   [2] x 1 <= 10: A (n = 10,err = 0.0%)
## |   [3] x 1 > 10
## |   |   [4] x 1 <= 20: B (n = 10,err = 0.0%)
## |   |   [5] x 1 > 20: C (n = 10,err = 0.0%)
plot(ct)

ctree

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