如何用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
相关产品推荐
相关产品推荐

