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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:39:13