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

在R中按国家分组重复回归(适配多重插补数据集)

按国家拆分多重插补数据集并提取指定系数的实现方法

核心思路

因为你的implist是多个插补后数据集的列表,所以要先对每个插补数据集按国家ID拆分,逐个国家跑模型提取系数,最后汇总所有插补结果。

具体步骤与代码

  1. 定义单个数据集的处理函数
    这个函数负责把单个插补数据集按国家拆分,跑模型并提取income和age的系数,同时处理样本量不足的情况(避免模型报错):
extract_coefs <- function(data) {
  # 按国家ID拆分数据集
  country_subsets <- split(data, data$country_id)
  
  # 遍历每个国家子集处理
  country_res <- lapply(country_subsets, function(sub_data) {
    # 检查样本量:至少要有2个不同学校+足够样本量才能跑混合模型
    if (length(unique(sub_data$school)) < 2 || nrow(sub_data) < 10) {
      return(data.frame(
        country_id = unique(sub_data$country_id),
        income_coef = NA,
        age_coef = NA,
        stringsAsFactors = FALSE
      ))
    }
    
    # 运行lmer模型
    model <- lmer(happy ~ income + age + sex + education + city + (1|school), data = sub_data)
    
    # 提取系数
    coef_summary <- coef(summary(model))
    income_coef <- coef_summary["income", "Estimate"]
    age_coef <- coef_summary["age", "Estimate"]
    
    # 返回当前国家的结果
    data.frame(
      country_id = unique(sub_data$country_id),
      income_coef = income_coef,
      age_coef = age_coef,
      stringsAsFactors = FALSE
    )
  })
  
  # 合并当前插补数据集里所有国家的结果
  do.call(rbind, country_res)
}
  1. 批量处理所有插补数据集
    把上面的函数应用到implist里的每一个插补数据集:
# 生成所有插补数据集的结果列表
all_imp_results <- lapply(implist, extract_coefs)

# 把所有结果合并成一个大的数据框
combined_results <- do.call(rbind, all_imp_results)
  1. 汇总多重插补的最终结果
    如果需要得到每个国家在多重插补后的平均系数,可以用dplyr做分组汇总:
library(dplyr)
final_coefs <- combined_results %>%
  group_by(country_id) %>%
  summarise(
    avg_income_coef = mean(income_coef, na.rm = TRUE),
    avg_age_coef = mean(age_coef, na.rm = TRUE),
    valid_imputations = sum(!is.na(income_coef))  # 统计有效插补次数
  )

注意事项

  • 样本量判断的阈值(比如10个样本、2个学校)可以根据你的实际数据调整,避免模型不收敛或结果不可靠
  • 如果需要更严谨的多重插补结果合并(比如计算标准误、置信区间),可以扩展函数提取标准误后,用Rubin规则手动计算,或者结合mice包的相关工具
  • 如果你的implist是mice包生成的,也可以考虑用with()结合分组,但手动拆分的方式更灵活可控

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:30:55