Home > Mobile >  Multiple minimal models in R forward stepwise regression
Multiple minimal models in R forward stepwise regression

Time:10-22

In R stepwise forward regression, I would like to specify several minimal models. I am looking for the best model whith choices between 12 variables (6 flow variables Q_ and 6 precipitation variables LE_).

Biggest model takes into account all the variables :

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))

With Sub_fit my set of data (data frame with Q and my 12 variables).

I would like to have at least one variable "LE_XX" in my model. So my minimal model could be :

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

OR

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

OR...

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

With finally :

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

"lower", into "scope", does not allow a list but should be one unique formula. Is it possible to do what I need ?

CodePudding user response:

To specify several minimal models in stepwise forward regression, create the smallest formulas with, for instance, lapply and then loop through them.
In the example below, built-in data set mtcars is used to fit several models having mpg as response, one per each of the 3 last variables in the data set.

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))  
})

Now select with AIC as criterion

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

fit_list[[which.min(min_aic)]]
  • Related