【问题标题】:Adding fixed effects regression line to ggplot将固定效应回归线添加到 ggplot
【发布时间】:2021-10-25 17:07:38
【问题描述】:

我正在使用 ggplot 绘制面板数据,我想将我的固定效应模型“fixed”的回归线添加到图中。这是当前代码:

# Fixed Effects Model in plm
fixed <- plm(progenyMean ~ damMean, data=finalDT, model= "within", index = c("sireID", "cropNum"))

# Plotting Function
plotFunction <- function(Data){
  
  ggplot(Data, aes(x=damMean, y=progenyMean)) + 
    geom_point() + 
    geom_smooth(method = "lm", se = T, formula=fixed)
  
}

但是,绘图无法识别geom_smooth(),并且绘图上没有回归线。

是否可以在这里为固定效应模型绘制回归线?

【问题讨论】:

  • 如果您删除 geom_smooth 中的参数,它将仅适用于 geom_smooth()
  • 如果你想使用文字结果,这取决于 R 中对象的结构。R 中的许多库都是为数据建模而设计的,它们在结果对象的结构上存在很大差异。如果您使用基本 R 模型函数,此article 可能会有所帮助。如果您想要更全面的答案,最好提供reproducible example

标签: r ggplot2 plot regression panel-data


【解决方案1】:

操作。请在您的下一个问题中包含一个可重复的示例,以便我们可以更好地帮助您。在这种情况下,我将使用与on Princeton's site here 相同的数据集来回答,因为我不太熟悉支持包plm() 中的plm() 函数的必要数据结构@。我确实希望数据集能够更可靠地存在......但希望即使数据集不再可用,这个示例仍然具有说明性。

library(foreign)
library(plm)
library(ggplot2)
library(dplyr)
library(tidyr)

Panel <- read.dta("http://dss.princeton.edu/training/Panel101.dta")

fixed  <-plm(y  ~  x1, data=Panel,  index=c("country",  "year"), model="within")
my_lm <- lm(y ~ x1, data=Panel)  # including for some reference

示例:绘制简单的线性回归

请注意,我还引用了标准线性模型 - 这是为了向您展示如何提取值并从中绘制一条线以匹配 geom_smooth()。这是该数据的示例图加上一条由geom_smooth() 使用的lm() 函数绘制的线。

plot <- Panel %>%
  ggplot(aes(x1, y)) + geom_point() + theme_bw() +
  geom_smooth(method="lm", alpha=0.1, color='gray', size=4)
plot

如果我想绘制一条线以匹配来自geom_smooth() 的线性回归,您可以使用geom_abline() 并指定slope=intercept=。你可以看到这些直接来自我们的my_lm 列表:

> my_lm

Call:
lm(formula = y ~ x1, data = Panel)

Coefficients:
(Intercept)           x1  
  1.524e+09    4.950e+08

提取my_lm$coefficients 的这些值会得到我们的斜率和截距(意识到命名向量的第一个位置是截距,第二个是斜率。你会看到我们的新蓝线直接在@987654342 上方运行@line - 这就是为什么我把那个做的这么胖:)。

plot + geom_abline(
    slope=my_lm$coefficients[2],
    intercept = my_lm$coefficients[1], color='blue')

plm() 绘制线

可以使用相同的策略从使用plm() 的预测模型中绘制线。在这里,它更简单,因为来自plm() 的模型似乎截距为 0:

> fixed

Model Formula: y ~ x1

Coefficients:
        x1 
2475617827

好吧,那么用同样的方式绘制很容易:

plot + geom_abline(slope=fixed$coefficients, color='red')

在你的情况下,我会试试这个:

 ggplot(Data, aes(x=damMean, y=progenyMean)) + 
    geom_point() +
    geom_abline(slope=fixed$coefficients)

【讨论】:

  • 感谢您的详细回复!我最近改进了我的固定效应模型以包含 2 个更多的预测变量(现在总共 3 个),所以当我使用上面的这种方法和fixed$coefficients 绘制固定效应回归线时,我得到了 3 条单独的线。这里可以获取1行吗?
  • 可能。检查fixed$coefficients 在您的新模型中为您提供了什么。它通常应该是一个命名向量或者可能是一个矩阵......您可以相应地引用它。
猜你喜欢
  • 2013-03-16
  • 2020-03-20
  • 2021-04-16
  • 2021-05-21
  • 2018-08-28
  • 1970-01-01
  • 2021-11-03
  • 2016-02-14
相关资源
最近更新 更多