R语言ggplot2如何计算绘制跨多分组的grand总体回归曲线
考虑分组异质性的总体(grand)回归实现方案
要实现纳入分组间差异、同时输出跨组汇总效果的grand回归,不能直接对全量数据做普通线性回归——这类方法会忽略组内观测的非独立性,估计结果存在偏差。推荐使用线性混合效应模型(LMM):将分组作为随机效应纳入建模,既可以捕捉不同分组的取值分布异质性,又能输出控制组间差异后的总体平均效应,完全匹配需求。
实现代码
set.seed(123) # 示例数据构造 df <- data.frame( Group = c(rep("A",8), rep("B",10), rep("C",7)), Area = c(1,3,2,4,3,5,7,9, rnorm(10), sample(7)), x = c(1:8,1:10,1:7) ) library(ggplot2) library(lme4) # 线性混合模型依赖包 # 自定义grand回归拟合函数 grand_lmm_smooth <- function(data, ...) { # 拟合混合模型:x为固定效应,Group设为随机截距 # 若需考虑组间斜率异质性,可将随机项改为 (x | Group) lmm_model <- lmer(Area ~ x + (1 | Group), data = data) # 生成x全取值范围的总体平均预测值(re.form=NA表示不叠加分组随机偏差) pred_data <- data.frame( x = seq(min(data$x), max(data$x), length.out = 100) ) pred_data$Area <- predict(lmm_model, newdata = pred_data, re.form = NA) return(pred_data) } # 绘图 ggplot(df, aes(x = x, y = Area)) + # 绘制各分组单独的lm回归曲线(灰色细线) geom_smooth(aes(group = Group), method = "lm", se = FALSE, color = "grey70", linewidth = 0.8) + # 绘制控制组间异质性的grand总体回归(红色加粗虚线) geom_smooth(method = grand_lmm_smooth, se = FALSE, color = "#c0392b", linewidth = 1.5, linetype = "dashed") + # 绘制原始观测点,按分组着色 geom_point(aes(color = Group), size = 2, alpha = 0.8) + theme_bw()
参数说明
- 随机效应设置:默认使用
(1 | Group)随机截距结构,即假设不同分组的Area基线水平存在差异,但x对Area的影响斜率组间一致;如果数据中不同分组的x效应差异明显,可将随机项替换为(x | Group),允许组间斜率随机变动,此时输出的固定效应为所有组斜率的加权平均,结果更贴合实际数据特征。 re.form = NA是输出grand回归的核心参数:预测时不叠加单个分组的随机偏差,直接返回总体层面的平均预测结果,不会被单个分组的极端分布干扰。- 和普通全量lm的差异:普通全量lm默认所有观测相互独立,会忽略组内数据的聚集性,高估有效样本量导致系数和标准误估计偏误;混合模型会自动调整组内相关带来的影响,得到的总体效应符合“考虑分组为独立事件、再跨组汇总”的要求。
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

