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

