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

如何在循环中存储多因变量回归模型并基于AIC/BIC比较模型?

解决方法

1. 将模型对象保存到列表中

你当前的循环里每次都会覆盖est_model,所以得用列表来存储每个回归模型,这样后续才能对多个模型做比较。修改后的代码如下:

library(rcompanion)

depvar <- c("qsec", "hp")
indepvar <- paste(c("mpg", "wt", "am", "disp"), collapse = " + ")

# 初始化空列表存模型
model_list <- list()

for(i in 1:length(depvar)){
  # 把每个模型存入列表,用因变量名当元素名称,方便后续识别
  model_list[[depvar[i]]] <- lm(paste(depvar[i],"~", indepvar), data=mtcars)
}

# 可以查看下存储好的模型
model_list

2. 基于AIC/BIC比较模型

方法一:用rcompanion::compareLM()

直接把列表里的模型传入compareLM(),就能得到包含AIC、BIC在内的多维度对比结果:

# 对比两个模型
model_compare <- compareLM(model_list[[1]], model_list[[2]])
print(model_compare)

如果后续模型数量变多,不用逐个写参数,用do.call一次性传入所有模型更高效:

model_compare <- do.call(compareLM, model_list)
print(model_compare)

方法二:手动提取AIC/BIC

要是不想依赖rcompanion包,也可以直接用基础函数提取指标并整理成表格:

# 提取每个模型的AIC和BIC值
aic_values <- sapply(model_list, AIC)
bic_values <- sapply(model_list, BIC)

# 整理成直观的数据框
model_metrics <- data.frame(
  模型 = names(model_list),
  AIC = aic_values,
  BIC = bic_values,
  row.names = NULL
)

print(model_metrics)

补充说明

  • compareLM()还会输出R²、调整R²等统计量,适合全面评估模型表现
  • AIC和BIC的数值越小,代表模型在平衡拟合度与复杂度上的表现越好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:17:50