R语言向前逐步回归如何设置多最小模型强制包含LE类变量
基于R语言向前逐步回归强制保留至少1个LE类变量的实现方案
原生
step函数的scope.lower参数仅支持单个公式,无法直接指定多个可选初始最小模型,因此采用「遍历所有合法初始模型+统一择优」的方案实现需求。
步骤1:定义公共参数
# 定义纳入所有变量的最大模型 formule_big <- "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_big, Sub_fit)) # 提取所有LE类备选变量名 le_vars <- c("LE_6h", "LE_12h", "LE_18h", "LE_24h", "LE_30h", "LE_36h")
步骤2:遍历所有合法初始模型运行向前逐步回归
# 存储所有逐步回归结果的列表 step_results <- list() # 逐个以单个LE变量为初始最小模型运行向前逐步 for (le_col in le_vars) { # 构造当前迭代的最小模型公式 smallest_form <- as.formula(paste0("Q ~ 0 + ", le_col)) # 构造初始回归模型 init_model <- lm(smallest_form, data = Sub_fit) # 运行向前逐步回归,trace=0关闭过程日志输出,需查看过程可改为1 cur_step_res <- step( object = init_model, direction = "forward", scope = list(lower = smallest_form, upper = biggest), trace = 0 ) # 存储当前迭代结果和对应AIC值用于后续择优 step_results[[le_col]] <- list( model = cur_step_res, aic = AIC(cur_step_res) ) }
步骤3:筛选最优模型
# 提取所有模型的AIC值 all_aic <- sapply(step_results, function(x) x$aic) # 选取AIC最小的模型作为最终最优模型 best_model <- step_results[[which.min(all_aic)]]$model
补充说明
- 若需更换择优指标,可将
AIC(cur_step_res)替换为BIC、调整R方等对应指标的计算代码即可 - 若要限制最终模型的变量数量,可在存储结果时额外记录模型自由度,筛选时增加对应约束条件
- 该方案完全基于base R原生函数实现,无需安装额外依赖包
内容的提问来源于stack exchange,提问作者Chika
相关产品推荐
相关产品推荐

