我认为很大程度上取决于模型的目的是什么。推理还是预测?
如果是推理,那么您确实需要将一些领域知识纳入流程,否则您可能会识别出完全虚假的关联,其中交互可能看起来很有意义,但实际上要么是样本的产物,要么掩盖了其他一些问题例如在一个或多个变量中的非线性。
但是,如果目的是预测,那么您可以采取多种方法。一种方法是拟合所有可能的模型并使用训练/验证/测试方法来找到提供最佳预测的模型。
编辑:一个简单的模拟可以显示没有领域知识的推理会出现什么问题:
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
这强调了我的中心观点,即很大程度上取决于模型的目的。