如何在R中按分组提取回归beta系数并计算变量均值
分组回归与汇总统计实现方法
可以用dplyr结合broom包快速实现你的需求,具体步骤如下:
1. 安装并加载依赖包
如果尚未安装相关包,先执行安装命令:
install.packages(c("dplyr", "broom"))
加载包:
library(dplyr) library(broom)
2. 分组计算回归系数与均值
通过分组后嵌套执行回归,提取目标系数并计算均值:
result <- sales.data %>% group_by(MDM_Key) %>% summarise( # 提取iek_disc_price对应的beta系数 beta = tidy(lm(sale_count ~ iek_disc_price, data = cur_data())) %>% filter(term == "iek_disc_price") %>% pull(estimate), # 计算sale_count的均值(保留两位小数) `mean(sale_count)` = round(mean(sale_count), 2), # 计算iek_disc_price的均值(取整数) `mean(iek_disc_price)` = round(mean(iek_disc_price), 0) ) # 输出结果 print(result)
结果说明
由于你的示例数据中MDM_Key=370和371的观测值完全一致,因此两组的beta系数、均值结果完全相同,输出与你预期的格式一致:
# A tibble: 2 × 4 MDM_Key beta `mean(sale_count)` `mean(iek_disc_price)` <int> <dbl> <dbl> <dbl> 1 370 0.000856 25.1 35305 2 371 0.000856 25.1 35305
替代方案(无需broom包)
如果不想额外加载broom包,也可以直接从回归结果中提取系数:
result <- sales.data %>% group_by(MDM_Key) %>% summarise( beta = coef(lm(sale_count ~ iek_disc_price, data = cur_data()))["iek_disc_price"], `mean(sale_count)` = round(mean(sale_count), 2), `mean(iek_disc_price)` = round(mean(iek_disc_price), 0) )
内容的提问来源于stack exchange,提问作者psysky
相关产品推荐
相关产品推荐

