在r中引用rpart终端节点

在r中引用rpart终端节点,r,rpart,R,Rpart,我对R(和rpart)是新手。我有车辆模型数据(~400个模型)。我正在使用rpart将这些车辆分成更小的数量(例如5-10组),它们具有相似的车辆维修成本。我已经成功运行了rpart,并拥有这些分组 fit <- rpart(repairs ~ model, data=data, method='anova', control=rpart.control(minsplit=2,minbucket=1,cp=.0005)) fit在rpart对象中,您要查找的信息基本上存储在$w

我对R(和rpart)是新手。我有车辆模型数据(~400个模型)。我正在使用rpart将这些车辆分成更小的数量(例如5-10组),它们具有相似的车辆维修成本。我已经成功运行了rpart,并拥有这些分组

fit <- rpart(repairs ~ model, data=data, method='anova', control=rpart.control(minsplit=2,minbucket=1,cp=.0005))    

fit在
rpart
对象中,您要查找的信息基本上存储在
$where
元素中。它为您指定了每个观测的节点编号:

table(fit$where, data$modelgroup)
##     Group1 Group2 Group3 Group4
##   3      6      0      0      0
##   4      0      6      0      0
##   6      0      0      3      0
##   7      0      0      0      3
当然,您也可以将节点ID(3、4、6、7)切换到一个因子或字符变量,例如,
因子(fit$where,levels=c(3、4、6、7),labels=paste0(“Group”,1:4))
或沿着这些行的某个东西

如果您想使用简单统一的界面在新数据上执行此操作,可以将
rpart
对象转换为包
partykit
中的
party
对象:

library("partykit")
fit2 <- as.party(fit)

这将返回与上面相同的结果,但也可以很容易地应用于其他
新数据。

如果您提供一个最小的[可复制的示例],则会更容易帮助您。包括一些示例数据并指定输入的所需输出。我不确定是否可以提供一个可复制的示例,但作为一个示例,例如在运行rpart and print(fit)后,其中一个终端节点包含FordTaurus、ChevyMalibu…和40多个模型名称。假设我要调用此终端节点中列出的所有型号“组1”。我本质上想让代码告诉我们,如果模型名在这个列表中,那么就称它为“group1”,并对每个终端节点都这样做。提供假设的解决方案并不容易。也许您可以从
rpart
帮助页面修改示例,以制作一个可复制的示例。很抱歉延迟。直到现在我才能够回到这个话题。根据您的要求,我添加了一个可复制的示例。我把它添加到我原来的帖子底部。我希望这有帮助。谢谢你的回复。我很感激!我尝试使用建议的代码(表(fit$where,data$modelgroup)),但收到一条错误消息。我也不明白这是为了做什么。在我上面的示例中,我如何使用此选项将“组1”分配给模型a和b的新变量数据$modelgroup(因为它们一起位于第一个终端节点)?该表应显示来自
fit$where
的分组与手动构建的
modelgroup
一致,即提供相同的组信息。如果没有一个完整的示例再现错误消息,我无法对错误进行评论。我使用的例子是你发布的简单的18个观察数据集。谢谢你的澄清。我让它工作了。我感谢你的帮助!我修改了您的回答并使用了以下代码。再次感谢!数据$modelgroup
table(fit$where, data$modelgroup)
##     Group1 Group2 Group3 Group4
##   3      6      0      0      0
##   4      0      6      0      0
##   6      0      0      3      0
##   7      0      0      0      3
library("partykit")
fit2 <- as.party(fit)
table(predict(fit2, newdata = data, type = "node"), data$modelgroup)
##     Group1 Group2 Group3 Group4
##   3      6      0      0      0
##   4      0      6      0      0
##   6      0      0      3      0
##   7      0      0      0      3