如何系统地选择在多元回归模型中包含哪些交互?

机器算法验证 回归 特征选择 相互作用 模型选择
2022-03-30 23:06:48

在对这篇文章的回答中,一位用户根据 Hastie 等人的《统计学习的要素》一书的第 3 章提出了建议。al,以下方法来选择模型中包含哪些交互作用:

  1. 尝试所有可能的变量子集,并选择给出具有最小贝叶斯信息标准 (BIC) 值的回归的变量
  2. 向前或向后逐步选择

在与该答案相关的评论中,这两种方法都被描述为不好。

那么,如果我们不应该使用上面的方法 1) 或 2),我们究竟如何决定在模型中使用哪些变量/交互?我在一些地方看到过“领域知识”的建议,但这似乎有点逃避现实。在非常常见的情况下,领域知识不会有帮助,在这种情况下,我们不知道自然界中是否存在特定的交互效应,并且我们依赖于数据本身中的信息。

例如,假设我们有预测变量——年龄、性别、身高、体重、经验、智商——和响应变量薪水。我们如何决定包含/不包含哪些交互影响?

这个例子可能是最简单的场景,因为我们非常了解所有这些变量,甚至仍然不清楚如何决定包含或排除哪些交互。在其他情况下,我们将处理预测变量,我们对它们之间的交互是否会影响响应变量没有预先存在的直觉。

所以我正在寻找一种系统的方法来选择在多元回归模型中包含哪些交互。当领域知识不可用或无用时,经验丰富的统计学家如何选择要包括哪些交互?

1个回答

我认为很大程度上取决于模型的目的是什么。推理还是预测?

如果是推理,那么您确实需要将一些领域知识纳入流程,否则您可能会识别出完全虚假的关联,其中交互可能看起来很有意义,但实际上要么是样本的产物,要么掩盖了其他一些问题例如在一个或多个变量中的非线性。

但是,如果目的是预测,那么您可以采取多种方法。一种方法是拟合所有可能的模型并使用训练/验证/测试方法来找到提供最佳预测的模型。


编辑:一个简单的模拟可以显示没有领域知识的推理会出现什么问题:

set.seed(50)
N <- 50

X1 <- runif(N, 1, 15)
X2 <- rnorm(N)
  
Y <-  X1 + X2^2 + rnorm(N)

所以,这里我们假设一个实际的数据生成过程=X1+X22

如果我们有一些领域/专家知识表明可能涉及一些非线性,我们可能会拟合模型:

> lm(Y ~ X1 + I(X1^2) + X2 + I(X2^2) ) %>% summary()

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.89041    0.65047  -1.369    0.178    
X1           1.21915    0.19631   6.210 1.52e-07 ***
I(X1^2)     -0.01462    0.01304  -1.122    0.268    
X2          -0.19150    0.15530  -1.233    0.224    
I(X2^2)      1.07849    0.08945  12.058 1.08e-15 ***

它提供了与“真实”数据生成过程一致的推论。

另一方面,如果我们没有知识,而是考虑一个只有一阶项和交互作用的模型,我们将获得:

> lm(Y ~ X1*X2) %>% summary()

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.01396    0.58267  -0.024    0.981    
X1           1.09098    0.07064  15.443  < 2e-16 ***
X2          -3.39998    0.54363  -6.254 1.20e-07 ***
X1:X2        0.35850    0.06726   5.330 2.88e-06 ***

这显然是虚假的。


进一步编辑:但是,当我们使用均方根误差查看预测准确性时,我们发现交互模型的性能略好:

> lm(Y ~ X1*X2) %>% predict() %>% `^`(2) %>% sum() %>% sqrt()
[1] 64.23458
> lm(Y ~ X1 + I(X1^2) + X2 + I(X2^2) ) %>% predict() %>% `^`(2) %>% sum() %>% sqrt()
[1] 64.87996

这强调了我的中心观点,即很大程度上取决于模型的目的。