如何在 R/tree 模型中包含交互项?

机器算法验证 r 回归 预测模型 大车
2022-03-05 06:14:10

我在很多地方都读过树对于揭示预测变量之间的复杂依赖关系很有用。R 中的树模型

CART 模型的递归结构非常适合揭示预测变量之间的复杂依赖关系。例如,如果土壤水分含量的影响在很大程度上取决于非线性方式的土壤质地,那么物种出现的 CART 模型比 GLM 甚至 GAM 中的交互项更能检测到这一点。

然而,tree()包中的函数似乎不接受交互项并报告错误“树无法处理交互项”。有没有办法在树中包含交互项?

> dat = read.csv("~/Downloads/treedata.csv")
> tree(cover~(elev+plotsize+disturb),data=dat)
node), split, n, deviance, yval
      * denotes terminal node

1) root 8971 39740 4.006  
  2) elev < 1157.5 6875 29610 3.868 *
  3) elev > 1157.5 2096  9567 4.460 *
> tree(cover~(elev+plotsize+disturb)^2,data=dat)
Error in tree(cover ~ (elev + plotsize + disturb)^2, data = dat) : 
  trees cannot handle interaction terms
1个回答

您无需在模型公式中添加交互项,树结构本身的性质允许交互而不指定交互变量。

在 R 中,公式中的交互项被转换为模型矩阵中的变量。例如,交互a:b将成为模型矩阵中的一个变量,其值为R 在幕后为您执行此操作。ab=a×b

在树中,交互不是通过对变量的显式操作而是通过树结构形成的。考虑这个使用著名的 Edgar Anderson Iris 数据集的例子

data(iris)
require(rpart)
mod <- rpart(Species ~ ., data = iris)
plot(mod)
text(mod)

生产

在此处输入图像描述

在这个简单的例子中,交互是本地的;该变量Petal.Width仅在模型中对Petal.Length大于或等于 2.45 的数据子集产生影响。换句话说,交互只影响在第一次分裂后最终沿着树的右手分支向下的观察。

相反,您指定的那种交互是全局的;在交互作用中对a:b的任何值都有影响`ab