【发布时间】:2016-06-10 05:11:48
【问题描述】:
我是 R(和 rpart)的新手。我有车辆模型数据(约 400 个模型)。我正在使用 rpart 将这些分组为具有相似车辆维修成本的较小数量(例如 5-10 组)。我已成功运行 rpart 并拥有这些分组。
fit <- rpart(repairs ~ model, data=data, method='anova', control=rpart.control(minsplit=2,minbucket=1,cp=.0005))
假设每个终端节点中大约有 40-80 个模型。有没有办法让我创建一个引用终端节点中的值的公式。假设 data$model 包含所有模型名称(并且是我正在尝试执行的自变量:
data$modelgroup <- data$model
data$modelgroup[data$modelgroup %in% terminal node 1] <- 'Group1'
data$modelgroup[data$modelgroup %in% terminal node 2] <- 'Group2'
and so on for the rest of the groups
另外,如果有一种方法可以做到这一点,而不必为每个组编写一行代码,那就太好了。
我知道我可以打印树并从终端节点手动复制文本并以这种方式完成,但这非常低效。
提前感谢您的帮助!
根据下面的要求,我在下面添加了一个可重现的示例。
data <- read.csv("rpart_example.csv")
data
data[,1:2]
Model Amount
1 a 1
2 a 1
3 a 1
4 b 1
5 b 1
6 b 1
7 c 2
8 c 2
9 c 2
10 d 2
11 d 2
12 d 2
13 e 3
14 e 3
15 e 3
16 f 4
17 f 4
18 f 4
fit <- rpart(Amount ~ Model, data=data, method='anova',
control=rpart.control(minsplit=2,minbucket=1,cp=.0005))
print(fit)
n= 18
node), split, n, deviance, yval
* denotes terminal node
1) root 18 20.5 2.166667
2) Model=a,b,c,d 12 3.0 1.500000
4) Model=a,b 6 0.0 1.000000 *
5) Model=c,d 6 0.0 2.000000 *
3) Model=e,f 6 1.5 3.500000
6) Model=e 3 0.0 3.000000 *
7) Model=f 3 0.0 4.000000 *
# create a variable modelgroup that groups models per terminal nodes from rpart
# I can do this manually as below
# is there a way for me to automate this assignment?
data$modelgroup <- as.character(data$Model)
# per rpart output, a&b are grouped into one terminal node
data$modelgroup[data$modelgroup %in% c('a','b')] <- 'Group1'
# per rpart output, c&d are grouped into the second terminal node
data$modelgroup[data$modelgroup %in% c('c','d')] <- 'Group2'
# per rpart, e is the third terminal node
data$modelgroup[data$modelgroup == 'e'] <- 'Group3'
# per rpart, f is the fourth terminal node
data$modelgroup[data$modelgroup == 'f'] <- 'Group4'
【问题讨论】:
-
如果您提供一个最小的 [可重现的示例] 会更容易为您提供帮助。包括一些示例数据并为该输入指定所需的输出。
-
我不确定我是否可以提供一个可重现的示例,但作为说明,例如在运行 rpart 和 print(fit) 之后,其中一个终端节点包含 FordTaurus、ChevyMalibu ... 和 40+更多型号名称。假设我想将此终端节点中列出的所有模型称为“组 1”。我基本上想要代码说明模型名称是否在此列表中,将其称为“Group 1”并为每个终端节点执行此操作。
-
提供假设的解决方案并不容易。或许您可以修改
rpart帮助页面中的示例以制作可重现的示例。 -
抱歉耽搁了。直到现在我都无法回到这个话题。根据您的要求,我添加了一个可重现的示例。我将它添加到我原来的帖子的底部。我希望这会有所帮助。