在R语言中用group_by生成分组回归预测值时遇报错的技术问询
问题解决:按分组生成回归预测值
错误原因分析
你的代码存在三个核心问题:
group_by()后直接调用glm()不符合dplyr分组逻辑,glm不会自动识别分组,需要用分组映射类函数处理glm的data参数指定了全局的df,没有使用分组后的子数据集,导致模型未按city分组拟合mutate中predict(glm)的调用方式错误,未传入正确的模型对象和对应分组的数据
正确实现方法
方法1:使用do()函数(传统分组建模方式)
df_1 <- df %>% group_by(city) %>% do({ # 对当前分组的数据集拟合模型 model <- glm(death ~ gender + age, data = ., family = "poisson") # 给当前分组数据添加预测值列 mutate(., death_p = predict(model, newdata = .)) }) %>% ungroup()
方法2:使用nest() + map()(现代tidyverse推荐方式)
这种方式更清晰,适合复杂分组建模场景:
library(purrr) # 需要加载purrr包,tidyverse套件已包含 df_1 <- df %>% group_by(city) %>% # 将每个分组的数据集打包为列表列 nest() %>% # 对每个分组数据拟合glm模型 mutate(model = map(data, ~glm(death ~ gender + age, data = ., family = "poisson"))) %>% # 用对应分组的模型对该组数据做预测 mutate(death_p = map2(data, model, ~predict(.y, newdata = .x))) %>% # 展开列表列,恢复原始行结构 unnest(c(data, death_p)) %>% ungroup()
额外提示
注意:你的因变量death是0-1二分类变量,通常更适合使用family = "binomial"(逻辑回归)来建模,泊松回归更适合计数型因变量。如果业务场景确实需要泊松回归,可以忽略此提示。
内容的提问来源于stack exchange,提问作者Amc
相关产品推荐
相关产品推荐

