R 中的 step() 如何处理交互和分类变量?

How does step() in R handle interactions and categorical variables?

我在 R.

中拟合了具有多重交互的线性回归 lm

现在,我想做变量选择。为此,我打算使用 step-函数。

但是,我不确定 step 究竟是如何处理交互的。我希望选择过程在以下意义上是分层的:

我怎样才能确保这一点?已经这样实现了吗?

您可以使用 regsubsets 获取所有可能的逐步回归模型,并从中提取满足您要求的子集。例如,当只考虑双向交互时,可以使用下面的方式来满足第一个需求:

require(leaps)
require(stringr)
tmp <- regsubsets(mpg ~ (wt + drat + disp + qsec)*(wt + drat + disp + qsec), data=mtcars, nbest=1000, really.big=T, intercept=T)
df <- summary(tmp)[[1]]
df <- as.data.frame(sapply(as.data.frame(df), as.numeric))

#for all columns in df which have ':' in the name, that is an interaction column
#if such a column is 1, each of the component columns must also be 1
comb_cols <- grep(":", names(df), value = TRUE)
for (i in 1:length(comb_cols)) {
  this_comb <- comb_cols[i]
  left_comp <- str_sub(this_comb, start = 1, end = str_locate(this_comb, ":")[1]-1)
  right_comp <- str_sub(this_comb, start = str_locate(this_comb, ":")[1]+1, end =  nchar(this_comb))
  df[,left_comp] <- ifelse(df[,this_comb]==1, 1, df[,left_comp])
  df[,right_comp] <- ifelse(df[,this_comb]==1, 1, df[,right_comp])
}
df <- df[!duplicated(df),]

然后从summary(tmp)中只提取df中的模型。