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

ggplot绘制面板数据时如何添加plm固定效应模型的回归线

问题原因

你现有代码无法生成回归线有两个核心错误:

  • geom_smooth()的method = "lm是调用普通最小二乘拟合逻辑,无法直接识别plm包生成的固定效应模型对象
  • formula参数要求传入公式类对象(比如y ~ x格式),你传入的是已经拟合完成的fixed模型对象,参数匹配完全错误,自然无法生成线条
可行的绘制方案

固定效应(组内估计)的回归线本质是控制了sireID、cropNum两类固定效应后,damMean对progenyMean的影响关系,完全可以绘制,推荐两种常用实现方式:

方案1:手动提取系数添加回归线

不需要额外依赖包,直接从拟合好的fixed对象里提取参数即可绘制:

# 提取固定效应模型的核心斜率系数
fixed_slope <- coef(fixed)
# 计算校正后的整体截距:因变量均值 - 斜率*自变量均值(plm的within模型默认不输出整体截距,需手动计算)
fixed_intercept <- mean(finalDT$progenyMean, na.rm = T) - fixed_slope * mean(finalDT$damMean, na.rm = T)

# 修改后的绘图函数
plotFunction <- function(Data){
  ggplot(Data, aes(x=damMean, y=progenyMean)) + 
    geom_point(alpha = 0.6) + 
    # 手动添加固定效应回归线
    geom_abline(intercept = fixed_intercept, slope = fixed_slope, color = "red", linewidth = 1)
}

如果需要分sireID/cropNum绘制各组单独的固定效应线,只需要额外提取各组的固定效应值,给每个组计算对应的专属截距即可。

方案2:利用拟合值绘制线条

如果需要展示每个观测对应的模型拟合值,可以用broom包快速生成带拟合结果的数据集:

library(broom)
# 给原数据集添加模型拟合值、残差等字段
finalDT_with_fitted <- augment(fixed, data = finalDT)

plotFunction <- function(Data){
  ggplot(Data, aes(x=damMean, y=progenyMean)) + 
    geom_point(alpha = 0.6) + 
    geom_line(aes(y = .fitted), color = "blue", linewidth = 1)
}
注意事项
  • 固定效应模型的回归线斜率和普通lm拟合的斜率结果不同,前者已经控制了个体、时间维度的混杂影响,两者不要混淆使用
  • 如果需要添加置信区间,可以从fixed模型的vcov矩阵提取标准误,手动计算上下限后用geom_ribbon添加即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:51:01