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

基于DataFrame列表预测结果使用ggplot与facet_wrap绘图的问题

问题解决方案

你当前的代码无法运行的核心原因有两点:

  • pred1是仅包含预测值向量的列表,没有和year、group、value等原始变量做关联,ggplot无法读取绘图所需的维度变量
  • ggplot的第一个参数要求传入数据框结构,不能直接传入列表类型的pred1

正确实现步骤

1. 绑定预测值与原始数据,合并为统一数据框

你已经拆分了分组子数据集table_list,训练得到了一一对应的model_list,直接用purrr的map2_df遍历两个列表,绑定预测值后自动合并为总数据框即可:

# 加载所需包
library(purrr)
library(ggplot2)

# 遍历每个分组的数据集和对应模型,生成预测值并合并为总表
pred_total <- map2_df(table_list, model_list, function(sub_dat, sub_mod) {
  # 为当前分组的数据集新增预测值列
  sub_dat$pred_smoker <- predict.glm(sub_mod, type = "response")
  return(sub_dat)
})

如果你需要基于female=1的新数据集dat_new生成预测结果,只要先按相同的分组规则拆分dat_new,再做同样的遍历操作即可:

# 拆分female=1的新数据集,拆分规则和训练集保持一致
dat_new_list <- dat_new %>%
  group_by(year, group) %>%
  group_split()

# 生成新数据集的预测结果总表
pred_new_total <- map2_df(dat_new_list, model_list, function(new_sub_dat, sub_mod) {
  new_sub_dat$pred_smoker <- predict.glm(sub_mod, newdata = new_sub_dat, type = "response")
  return(new_sub_dat)
})

2. 调用ggplot绘图

直接传入合并后的总数据框,即可正常按group分面绘图:

# 用原始数据+预测值绘图,可将预测值映射为点的颜色
ggplot(pred_total, aes(x = year, y = value)) +
  geom_point(aes(color = pred_smoker), alpha = 0.6) +
  facet_wrap(~ group)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:15:02