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

从Stata转R新手求循环回归实现方案(含tidyverse方法)

当然可以在R中实现完全等价的功能,不管是基础R循环还是tidyverse工具链都能搞定,下面分两种方式演示:

一、基础R循环实现(对应Stata的宏+循环逻辑)

这种方式和你在Stata里的思路最接近,用循环遍历变量组合,拟合模型后统一存储:

# 定义变量列表,对应Stata里的local宏
depvars <- c("mpg", "disp", "wt")
indepvars <- c("hp", "carb")
confounders <- c("vs", "am", "gear")

# 创建空列表存储模型结果(比单独命名变量更易管理)
model_results <- list()

# 嵌套循环遍历所有因变量-自变量组合
for (depvar in depvars) {
  for (indepvar in indepvars) {
    # 构建回归公式,对应Stata里的`reg `depvar` `indepvar` `confounders``
    formula <- as.formula(
      paste(depvar, "~", indepvar, "+", paste(confounders, collapse = "+"))
    )
    # 拟合线性回归
    model <- lm(formula, data = mtcars)
    # 按「因变量_自变量」的规则命名模型并存入列表
    model_name <- paste(depvar, indepvar, sep = "_")
    model_results[[model_name]] <- model
  }
}

# 示例:查看其中一个模型的详细结果
summary(model_results[["mpg_hp"]])

二、tidyverse工具链实现(更简洁的向量化风格)

用tidyverse的函数可以更高效地批量处理模型,同时生成整洁的结果数据集:

library(tidyverse)
library(broom) # 用于整理模型输出为整洁格式

# 定义变量列表
depvars <- c("mpg", "disp", "wt")
indepvars <- c("hp", "carb")
confounders <- paste(c("vs", "am", "gear"), collapse = "+")

# 生成所有变量组合 → 批量拟合模型 → 整理结果
model_tibble <- crossing(depvar = depvars, indepvar = indepvars) %>%
  mutate(
    # 用str_glue直观拼接回归公式
    formula = str_glue("{depvar} ~ {indepvar} + {confounders}"),
    # 批量拟合每个组合的模型
    model = map(formula, ~ lm(.x, data = mtcars)),
    # 可选:提取模型系数、显著性等整洁结果
    tidy_results = map(model, tidy, conf.int = TRUE),
    # 可选:提取模型整体拟合指标(R²、F值等)
    glance_results = map(model, glance)
  )

# 示例:查看所有模型的系数汇总
model_tibble %>%
  unnest(tidy_results) %>%
  select(depvar, indepvar, term, estimate, p.value, conf.low, conf.high)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:55:21