【发布时间】:2019-08-28 03:07:56
【问题描述】:
假设我有 2 个数据框,一个用于 2015 年,一个用于 2016 年。我想为每个数据框运行回归,并绘制每个回归的系数之一及其各自的置信区间。例如:
set.seed(1020022316)
library(dplyr)
library(stargazer)
df16 <- data.frame(
x1 = rnorm(1000, 0, 2),
t = sample(c(0, 1), 1000, T),
e = rnorm(1000, 0, 10)
) %>% mutate(y = 0.5 * x1 + 2 * t + e) %>%
select(-e)
df15 <- data.frame(
x1 = rnorm(1000, 0, 2),
t = sample(c(0, 1), 1000, T),
e = rnorm(1000, 0, 10)
) %>% mutate(y = 0.75 * x1 + 2.5 * t + e) %>%
select(-e)
lm16 <- lm(y ~ x1 + t, data = df16)
lm15 <- lm(y ~ x1 + t, data = df15)
stargazer(lm15, lm16, type="text", style = "aer", ci = TRUE, ci.level = 0.95)
我想用各自的 .95 CI 绘制 t=1.558, x=2015 和 t=2.797, x=2016。这样做的最佳方法是什么?
我可以“手动”完成,但我希望有更好的方法。
library(ggplot2)
df.plot <-
data.frame(
y = c(lm15$coefficients[['t']], lm16$coefficients[['t']]),
x = c(2015, 2016),
lb = c(
confint(lm15, 't', level = 0.95)[1],
confint(lm16, 't', level = 0.95)[1]
),
ub = c(
confint(lm15, 't', level = 0.95)[2],
confint(lm16, 't', level = 0.95)[2]
)
)
df.plot %>% ggplot(aes(x, y)) + geom_point() +
geom_errorbar(aes(ymin = lb, ymax = ub), width = 0.1) +
geom_hline(aes(yintercept=0), linetype="dashed")
最佳:图形质量(看起来不错)、代码优雅、易于扩展(超过 2 个回归)
【问题讨论】:
-
您要求做某事的“最佳”方式,但没有描述用于判断“最佳”含义的标准。您要解决的问题到底是什么?期望的输入和期望的输出是什么?
-
不是每个人都喜欢 dplyr,这里没有必要提供可重现的示例 ...
-
broom包可能是您正在寻找的更好的方式。 -
谢谢@Gregor。我试图弄清楚如何使用
broom。现在我有什么作品,但并不“优雅”,并且为许多回归做这件事会很痛苦。 -
您可能会从上游修复问题中受益:努力有效地拟合多个模型并提取您想要的数据