如何在拆分数据集上用ggplot绘制残差拟合图并合并为2×2网格
解决方案
1. 合并数据并添加set标识列
直接在map(broom::augment)之后调用bind_rows(.id = "set"),即可将原列表的名称(对应各子集的set编号)作为新列set的值添加到合并后的数据中:
library(datasets) library(tidyverse) library(broom) # 数据整理 ans_long <- anscombe %>% pivot_longer( everything(), names_to = c(".value", "set"), names_pattern = "(.)(.)" ) # 拟合模型并合并结果,同时添加set标识列 augmented_data <- ans_long %>% split(.$set) %>% map(~ lm(y ~ x, data = .x)) %>% map(augment) %>% bind_rows(.id = "set")
合并后的augmented_data会包含所有子集的拟合结果,且通过set列区分不同分组。
2. 绘制2×2网格的残差-拟合值关系图
基于合并后的数据集,使用ggplot结合facet_wrap实现2×2布局的残差图:
ggplot(augmented_data, aes(x = .fitted, y = .resid)) + geom_point(size = 2) + geom_hline(yintercept = 0, linetype = "dashed", color = "red") + facet_wrap(~ set, nrow = 2, ncol = 2) + labs(x = "拟合值", y = "残差") + theme_bw()
关键说明
geom_hline添加残差为0的参考线,便于直观观察残差分布趋势facet_wrap(~ set, nrow = 2, ncol = 2)强制指定2行2列的网格布局theme_bw()使用简洁的黑白主题,提升图表可读性
内容的提问来源于stack exchange,提问作者Ramakrishna S
相关产品推荐
相关产品推荐

