You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动选择具有最低AIC/BIC的最优线性模型?

自动选择最低AIC的线性模型方案

需求说明

我想要自动创建具有最低AIC值的线性模型,已经写好了获取AIC的代码,通过step()函数得到了基于AIC准则的model_aic和基于BIC准则的model_bic。现在需要实现一套自动化流程,不用手动查看输出,就能从这两个模型里选出最优的,方便适配不同数据集。之前试过Stack Overflow上的循环遍历代码,但没成功,相关代码如下:

现有模型构建代码

fullModel = lm(data$num ~ data$age + data$sex + 
data$chol + data$hd + data$ca)
nullModel = lm(num ~ 1)
model_aic = step(nullModel, scope=list(lower=nullModel, upper=fullModel), direction='both')
n = dim(data)[1]
model_bic <- step(nullModel, scope=list(lower=nullModel, upper=fullModel), direction='both', k=log(n))

尝试过的遍历选择代码(未成功)

mod_headers <- names(data[1:ncol(data)-1])
f <- function(mod_headers) {
  models <- list()
  k <- 1
  for (i in 1:length(mod_headers)) {
    tab <- combn(mod_headers, i)
    for(j in 1:ncol(tab)) {
      mod_tab_new <- c(tab[, j], "Data")
      models[[k]] <- glm(data$num ~ ., data = data[mod_tab_new], 
                         family = binomial(link = "logit"))
      k <- k + 1
    }
  }
  models[[which.min(sapply(models, AIC))]]
}
 
f(mod_headers)

自动化选择最优模型的实用方案

不用复杂遍历,直接针对需求给出高效解决方法:

方案1:从已有的model_aic和model_bic中选AIC最低的模型

直接对比两个模型的AIC值,自动返回最优模型:

# 提取两个模型的AIC值
aic_scores <- c(AIC(model_aic), AIC(model_bic))
# 选择AIC最低的模型
best_model <- list(model_aic, model_bic)[[which.min(aic_scores)]]

方案2:替代失败的全遍历代码,高效筛选所有子模型中的最优AIC模型

之前的遍历代码存在逻辑错误(比如多余的"Data"参数),且变量多的时候组合数爆炸,效率极低。推荐用leaps包快速筛选:

library(leaps)
# 生成所有变量子集的模型结果
subset_results <- regsubsets(num ~ age + sex + chol + hd + ca, data = data, nvmax = 5)
summary_results <- summary(subset_results)

# 找到AIC最低的模型对应的索引
best_idx <- which.min(summary_results$aic)
# 获取该模型包含的变量
selected_vars <- names(summary_results$which[best_idx, ])[summary_results$which[best_idx, ]]
# 构建最终的最优线性模型
best_model <- lm(paste("num ~", paste(selected_vars[-1], collapse = " + ")), data = data)

关键提示

  • step()函数默认就是基于AIC逐步筛选的,生成的model_aic已经是AIC最优的逐步回归模型,无需额外遍历
  • 全量遍历所有变量组合仅适合变量数≤5的场景,变量增多后会导致计算量指数级增长,完全不实用

内容的提问来源于stack exchange,提问作者Dylan Conway

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:47:39