GLM 的交互项中的因子水平

机器算法验证 r 回归 广义线性模型 分类数据 相互作用
2022-03-21 18:46:01

在其他讨论或阅读中,我无法找到答案。

carVal假设mpg正在type使用glm(). 我已经读过,如果我使用某种算法来选择“最佳”模型特征,那么删除一些因子变量但保留其他变量是不合适的(即,carVal ~ mpg + type1无效,它必须是carVal ~ mpg + type1 + type2 + type3)。

我的问题是,如果我在mpg和之间包含一个交互项type,是否只对特定级别的mpg和进行交互type,但不包括type交互的所有级别。

例如,这是一个有效的模型:

carVal ~ mpg + type1 + type2 + type3 + type1:mpg

或者,公式是否必须如下:

carVal ~ mpg + type1 + type2 + type3 + type1:mpg + type2:mpg + type3:mpg

这是我在 R 4.0.2 版本中使用的代码示例:

library(leaps)

carVal = c(1000, 15000, 1500, 2000, 2500, 5000, 8000, 9500, 11000)  
mpg = c(29, 45, 20, 28, 30, 40, 35, 38, 47)  
type = as.factor(c(1, 2, 2, 3, 1, 0, 1, 0, 0))  
car.data = data.frame(carVal, mpg, type)  
subset.model = regsubsets(x = as.formula('carVal ~ mpg + type + type:mpg'), data = car.data, method = 'exhaustive')

summary(subset.model)
1个回答

首先,我会避免任何逐步的程序。

那说:

如果我在 mpg 和 type 之间包含一个交互项,是否适合仅针对某些级别的 type 和 mpg 进行交互,但不包括交互的所有级别的类型。

通常您只需将模型指定为

carVal ~ mpg * type

或等效地:

carVal ~ mpg + type + mpg:type

然后软件将创建所有必要的虚拟变量以及它们之间的交互作用mpg

从您的问题来看,您可能正在自己创建虚拟变量,在这种情况下,如果您有充分的理由,没有技术原因不能省略某些交互,但根据我的经验,这可以创建各种诸如秩不足的模型矩阵或过度拟合的模型等问题,该模型对新数据的泛化能力极差。

因此,如果您想互动,只需使用mpg * type- 它会让您的生活更轻松。