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

如何批量计算单一线性回归模型在各国分组的R平方值?

批量计算分组线性回归的R平方(R语言实现)

嘿,手动跑200次回归绝对是折磨!完全不用这么麻烦,用R里的tidyverse工具链(dplyr + broom)就能一键搞定所有分组的R平方,高效又省心。下面给你两种最常用的实现方式,你可以根据自己的习惯选:

方法一:用dplyr + broom的经典组合

首先确保你安装了这两个包(没装的话先跑install.packages(c("dplyr", "broom"))),然后用以下代码:

# 加载包
library(dplyr)
library(broom)

# 假设你的数据集叫df,country是分组变量,y是因变量,x是自变量(换成你实际的变量名)
group_r_squared <- df %>%
  # 按国家分组
  group_by(country) %>%
  # 为每个分组拟合线性回归模型
  do(model = lm(y ~ x, data = .)) %>%  # 这里把y~x换成你的IP2模型公式,比如y~x1+x2+x3
  # 提取每个模型的R平方
  mutate(r_squared = glance(model)$r.squared) %>%
  # 只保留需要的列
  select(country, r_squared)

代码解释:

  • group_by(country):把数据集按国家拆分成一个个子数据集
  • do(model = lm(...)):为每个子数据集拟合指定的线性回归模型
  • glance(model):从模型对象中提取整体统计量(包括R平方、调整R平方、AIC等),我们只取r.squared
  • 最后用select()筛选出国家和对应的R平方,得到整洁的结果

方法二:更简洁的summarize版本(tidyverse 1.0.0+支持)

如果你的dplyr版本比较新,可以用更短的代码实现,逻辑是一样的:

group_r_squared <- df %>%
  group_by(country) %>%
  summarize(
    # 用cur_data()指代当前分组的数据集,拟合模型后提取R平方
    r_squared = glance(lm(y ~ x, data = cur_data()))$r.squared,
    # 分组后取消分组属性,回到普通数据框
    .groups = "drop"
  )

备选:Base R实现(不用额外装包)

要是你不想用tidyverse,用Base R的by()函数也能实现:

# 按国家分组计算每个组的R平方
group_r_squared <- by(df, df$country, function(sub_df) {
  model <- lm(y ~ x, data = sub_df)  # 替换成你的模型公式
  summary(model)$r.squared
})

# 转换成整洁的数据框格式
group_r_squared_df <- data.frame(
  country = names(group_r_squared),
  r_squared = as.numeric(group_r_squared)
)

注意事项:

  • 把代码里的y ~ x替换成你实际的IP2模型公式就行,不管是单变量还是多变量回归,提取R平方的逻辑都不变
  • 结果会是一个两列的数据框,每一行对应一个国家和它的模型R平方,直接就能查看或进一步分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:09:59