R 前向逐步回归中的多个最小模型

Multiple minimal models in R forward stepwise regression

在 R 逐步前向回归中,我想指定几个最小模型。我正在寻找在 12 个变量(6 个流量变量 Q_ 和 6 个降水变量 LE_)之间进行选择的最佳模型。

最大的模型考虑了所有变量:

formule <- "Q ~ 0 + Q_minus_1h + Q_minus_2h + Q_minus_3h + Q_minus_4h + Q_minus_5h + Q_minus_6h + LE_6h + LE_12h + LE_18h + LE_24h + LE_30h + LE_36h"
biggest <- formula(lm(formule, Sub_fit))

使用 Sub_fit 我的数据集(带有 Q 和我的 12 个变量的数据框)。

我想在我的模型中至少有一个变量“LE_XX”。所以我的最小模型可能是:

formule <- "Q ~ 0 + LE_6h"
smallest <- formula(lm(formule, Sub_fit))

formule <- "Q ~ 0 + LE_12h"
smallest <- formula(lm(formule, Sub_fit))

或...

formule <- "Q ~ 0 + LE_36h"
smallest <- formula(lm(formule, Sub_fit))

最后:

modele.res <- step(lm(as.formula("Q ~ 0"),data=Sub_fit), direction='forward', scope=list(lower=smallest, upper=biggest))

“较低”,进入“范围”,不允许列表,但应该是一个唯一的公式。可以做我需要的吗?

要在逐步前向回归中指定几个最小模型,请创建最小的公式,例如 lapply,然后循环遍历它们。
在下面的示例中,内置数据集 mtcars 用于拟合多个具有 mpg 作为响应的模型,每个模型对应数据集中最后 3 个变量。

data(mtcars)

biggest <- mpg ~ .

sml <- names(mtcars)[9:11]
small_list <- lapply(sml, function(x) {
  fmla <- paste("mpg", x, sep = "~")
  as.formula(fmla)
})
names(small_list) <- sml

fit <- lm(mpg ~ ., mtcars)
fit_list <- lapply(small_list, function(smallest){
  step(fit, scope = list(lower = smallest, upper = biggest))  
})

现在 select 以 AIC 为标准

min_aic <- sapply(fit_list, AIC)
min_aic
#      am     gear     carb 
#154.1194 155.9852 154.5631

fit_list[[which.min(min_aic)]]

StepReg 中的逐步函数 R 包可以在逐步回归过程中包含所有模型中所需的一些变量。

library(StepReg)
f1 <- Q ~ 0 + Q_minus_1h + Q_minus_2h + Q_minus_3h + Q_minus_4h + Q_minus_5h + Q_minus_6h + LE_6h + LE_12h + LE_18h + LE_24h + LE_30h + LE_36h

## include LE_6h in the model
stepwise(formula=f1,
         data=yourdata,
         include="LE_6h",
         selection="forward",
         select="AIC")

## include LE_6h and LE_12h in the model
stepwise(formula=f1,
         data=yourdata,
         include=c("LE_6h","LE_12h"),
         selection="forward",
         select="AIC")