ctree 忽略具有非句法名称的变量?
ctree ignores variables with non syntactic names?
我想知道 partkykit::ctree
函数是否忽略了具有非语法名称的变量,还是我遗漏了什么?
玩具示例:
myData<-data.frame(
Y = factor(rep(LETTERS[1:3], each=10)),
x1 = 1:30,
x2 = c(1:10,2:11,3:12)
)
显然 x1
是 Y
的最佳“预测因子”:
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, err = 0,0%)
| | [5] x1 > 20: C (n = 10, err = 0,0%)
Number of inner nodes: 2
Number of terminal nodes: 3
但是当我将其名称更改为非句法名称时,它似乎在树构建过程中被忽略了:
myData<-data.frame(
Y = factor(rep(LETTERS[1:3], each=10)),
`x 1` = 1:30,
x2 = c(1:10,2:11,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
你能建议任何方法来克服这种行为吗(因为我真的-真的-真的想用 x 1
作为名字,不要问为什么)?
感谢您指出这一点。这确实是 partykit::ctree
中的一个错误,但现在已在 1.2-11 版(R-Forge 上的当前开发版本)中修复。
此外,如果您只想在打印和绘图中使用 non-syntactic 标签,您可以使用以下快速但肮脏的解决方法:首先学习具有良好语法名称的数据。
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)
我想知道 partkykit::ctree
函数是否忽略了具有非语法名称的变量,还是我遗漏了什么?
玩具示例:
myData<-data.frame(
Y = factor(rep(LETTERS[1:3], each=10)),
x1 = 1:30,
x2 = c(1:10,2:11,3:12)
)
显然 x1
是 Y
的最佳“预测因子”:
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, err = 0,0%)
| | [5] x1 > 20: C (n = 10, err = 0,0%)
Number of inner nodes: 2
Number of terminal nodes: 3
但是当我将其名称更改为非句法名称时,它似乎在树构建过程中被忽略了:
myData<-data.frame(
Y = factor(rep(LETTERS[1:3], each=10)),
`x 1` = 1:30,
x2 = c(1:10,2:11,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
你能建议任何方法来克服这种行为吗(因为我真的-真的-真的想用 x 1
作为名字,不要问为什么)?
感谢您指出这一点。这确实是 partykit::ctree
中的一个错误,但现在已在 1.2-11 版(R-Forge 上的当前开发版本)中修复。
此外,如果您只想在打印和绘图中使用 non-syntactic 标签,您可以使用以下快速但肮脏的解决方法:首先学习具有良好语法名称的数据。
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)