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

循环构建线性回归模型:更换因变量与控制变量并纳入固定效应

批量构建带控制变量与固定效应的线性回归模型

第一步:修正并生成数据集

原代码中pivot_longer的匹配规则存在问题,starts_with("X")无法匹配年份列(2011/2012/2013),需改为starts_with("20")才能正确转换为长格式面板数据:

library(dplyr)
library(tidyr)

# 构造初始数据集
data <- data.frame(
  Country = c("USA","USA","USA","USA","India","India","India","India","China","China","China","China"),
  Indicator = rep(c("Population","GDP","Debt","Currency"), times=3),
  `2011` = rep(c(1,2,3,4), each=3),
  `2012` = rep(c(4,5,6,7), each=3),
  `2013` = rep(c(8,9,11,12), each=3)
)

# 转换为长格式并重塑宽格式
data <- data %>%
  pivot_longer(
    starts_with("20"),  # 修正匹配规则,选中年份列
    names_to = "Year",
    names_transform = list(Year = parse_number)
  ) %>%
  pivot_wider(names_from = Indicator, values_from = value) %>% 
  relocate(Year)

# 添加因变量y1-y5
data$y1 <- c(1,10,11,3,4,5,2,2,1)
data$y2 <- c(1,2,3,4,5,6,6,8,9)
data$y3 <- c(10,9,8,7,5,5,11,3,4)
data$y4 <- c(1,1,11,3,4,2,2,2,1)
data$y5 <- c(5,10,11,3,5,5,5,5,1)

第二步:批量构建模型并存储结果

使用plm包处理面板固定效应模型,同时规避共线性问题,循环遍历所有因变量、控制变量组合及固定效应选项:

library(plm)

# 定义因变量列表
y_vars <- paste0("y", 1:5)

# 定义控制变量候选集(核心自变量为GDP)
control_candidates <- c("Population", "Debt", "Currency", "Country")

# 生成所有控制变量组合(含无控制变量的情况)
control_combinations <- unlist(lapply(0:length(control_candidates), function(k) {
  combn(control_candidates, k, FUN = function(x) paste(x, collapse = " + "))
}), use.names = FALSE)
# 将空组合替换为"1"(表示仅保留截距项)
control_combinations[control_combinations == ""] <- "1"

# 定义固定效应选项
fe_options <- list(
  "无固定效应" = "",
  "仅国家固定效应" = "+ factor(Country)",
  "仅时间固定效应" = "+ factor(Year)",
  "双向固定效应" = "+ factor(Country) + factor(Year)"
)

# 创建嵌套列表存储所有模型摘要结果
model_results <- list()

# 循环拟合所有模型
for (y in y_vars) {
  model_results[[y]] <- list()
  for (controls in control_combinations) {
    # 构建基础公式(因变量~GDP+控制变量)
    base_formula <- if (controls == "1") {
      paste(y, "~ GDP")
    } else {
      paste(y, "~ GDP +", controls)
    }
    for (fe_label in names(fe_options)) {
      fe_term <- fe_options[[fe_label]]
      # 跳过控制变量含Country且同时加入国家固定效应的情况(避免完全共线性)
      if (grepl("Country", controls) && grepl("factor\\(Country\\)", fe_term)) {
        next
      }
      # 拼接完整公式
      full_formula <- as.formula(paste(base_formula, fe_term))
      
      # 拟合模型:有固定效应用plm的within模型,无固定效应用普通lm
      model <- if (fe_term != "") {
        plm(full_formula, data = data, model = "within", index = c("Country", "Year"))
      } else {
        lm(full_formula, data = data)
      }
      
      # 命名模型并存储摘要
      model_name <- paste0("控制变量: ", ifelse(controls == "1", "无", controls), " | ", fe_label)
      model_results[[y]][[model_name]] <- summary(model)
    }
  }
}

第三步:查看模型结果

通过嵌套列表索引查看指定模型的摘要,例如查看y1中仅GDP+双向固定效应的模型:

# 查看y1的目标模型结果
model_results[["y1"]][["控制变量: 无 | 双向固定效应"]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:40:35