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

如何用geom_smooth绘制控制year变量的age与happy关系曲线?

在ggplot中用geom_smooth控制协变量(调整year后可视化age与happy的关系)

你完全可以通过geom_smooth的formula参数直接加入协变量year,不需要提前分组汇总,就能生成控制year后的age与happy关系曲线。formula参数支持完整的回归公式,并非只能定义x的函数形式。

实现代码

首先是数据集生成(保留你提供的代码):

set.seed(42)
n <- 2000
dat <- data.frame(age=rep(20:79, n/60))
dat$year <- sample(2000:2020, size=NROW(dat), replace = T)
dat$happy <- sample(0:10, size = NROW(dat), replace = T, prob=c(1,2,5,8,11,16,22,18,8,6,3))

线性拟合(控制year)

直接在formula中加入year作为协变量,模型会自动控制year的影响,拟合age对happy的线性关系:

library(ggplot2)

ggplot(dat, aes(x=age, y=happy)) +
  geom_smooth(method = "lm", formula = y ~ x + year, se = FALSE) +
  labs(x = "年龄", y = "控制年份后的平均幸福感")

非线性拟合(控制year)

如果想要保留原代码的loess非线性拟合,同样可以在公式中加入year,loess会在控制year的基础上拟合age与happy的局部非线性关系:

ggplot(dat, aes(x=age, y=happy)) +
  geom_smooth(method = "loess", formula = y ~ x + year, se = FALSE) +
  labs(x = "年龄", y = "控制年份后的平均幸福感(非线性拟合)")

原理说明

geom_smooth会基于你指定的公式对整个数据集拟合模型,然后绘制age在year取平均水平(或调整后)的预测值曲线,这样就规避了年龄-时期-队列的混淆,直接展示调整year后age与happy的关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:52:26