多个模型的系数图
Coefficient plot over multiple models
我有一系列 33 个固定效应回归。每个回归都有其独特的因变量:不同贸易产品类型的成本。每个贸易产品类型都有两个针对两个不同关键自变量的回归,STC_exp 和 STC_import。
lval28_exports_tradeonly <- felm(lval28 ~ STC_exp | pair + year | 0 | pair, subset(STC_Data, NoTrade28 == 1))
lval28_imports_tradeonly <- felm(lval28 ~ STC_imp | pair + year | 0 | pair, subset(STC_Data, NoTrade28 == 1))
lval29_exports_tradeonly <- felm(lval29 ~ STC_exp | pair + year | 0 | pair, subset(STC_Data, NoTrade29 == 1))
lval29_imports_tradeonly <- felm(lval29 ~ STC_imp | pair + year | 0 | pair, subset(STC_Data, NoTrade29 == 1))
我想要做的是创建一个系数图,以便每个因变量的两个自变量在系数图上共享同一条线,或者可以分组在一起。我尝试使用 jtools
包中的 plot_summs
和其他一些包来执行此操作,但我没有取得太大成功。
我可以单独制作每个图形:
ore <- plot_summs(lval26_imports_tradeonly, lval26_exports_tradeonly, coefs = c("Ore" = "STC_exp", "Ore" = "STC_imp"), model.names = c("STC on importer", "STC on exporter"))
inorganic.chemicals <- plot_summs(lval28_imports_tradeonly, lval28_exports_tradeonly, coefs = c("Inorganic Chemicals" = "STC_exp", "Inorganic Chemicals" = "STC_imp"), model.names = c("STC on importer", "STC on exporter"))
但我希望能够以某种方式将它们结合起来。也许 jtools 包不适合马上使用?
直接用ggplot
就可以了。
下面,我制作了一些看起来与您的属性相似的示例数据。没有你的数据,我无法直接复制你的例子。
library(tibble)
library(dplyr)
library(tidyr)
set.seed(25443)
dat <- tibble(STC_exp = runif(500, -3, 3),
STC_imp = runif(500, -3, 3))
b1 <- runif(33, .1, .5)
b2 <- runif(33, .1, .5)
for(i in 1:33){
dat[[paste0("lval", i)]] <- b1[i] * dat$STC_exp + b2[i] * dat$STC_imp + rnorm(500, 0, .25)
}
将 STC_
变量和所有 lval
变量的数据重塑为 long-format。
library(tidyr)
dat <- dat %>% pivot_longer(cols=c("STC_exp", "STC_imp"), names_to= "ie", values_to = "stc")
dat <- dat %>% pivot_longer(cols=starts_with("lval"), names_to="var", values_to = "lval")
运行 模型并收集输出。
library(purrr)
library(broom)
mods <- dat %>%
group_by(ie, var) %>%
summarise(lm_mod= list(lm(lval ~ stc))) %>%
mutate(tidied = map(lm_mod,tidy,conf.int = TRUE)) %>%
unnest(tidied)
mods <- select(mods, -lm_mod) %>%
filter(term == "stc")
制作情节
library(ggplot2)
mods %>%
mutate(ie = factor(ie, levels=c("STC_exp", "STC_imp"),
labels=c("STC on Exporter", "STC on Importer"))) %>%
ggplot(aes(x=estimate, y=var, colour=ie)) +
geom_point(position = position_dodge(width=.75)) +
geom_errorbarh(aes(xmin=conf.low, xmax=conf.high), position=position_dodge(width=.75), height=0) +
labs(x="Estimate", y="", colour="Model") +
theme_bw()
我有一系列 33 个固定效应回归。每个回归都有其独特的因变量:不同贸易产品类型的成本。每个贸易产品类型都有两个针对两个不同关键自变量的回归,STC_exp 和 STC_import。
lval28_exports_tradeonly <- felm(lval28 ~ STC_exp | pair + year | 0 | pair, subset(STC_Data, NoTrade28 == 1))
lval28_imports_tradeonly <- felm(lval28 ~ STC_imp | pair + year | 0 | pair, subset(STC_Data, NoTrade28 == 1))
lval29_exports_tradeonly <- felm(lval29 ~ STC_exp | pair + year | 0 | pair, subset(STC_Data, NoTrade29 == 1))
lval29_imports_tradeonly <- felm(lval29 ~ STC_imp | pair + year | 0 | pair, subset(STC_Data, NoTrade29 == 1))
我想要做的是创建一个系数图,以便每个因变量的两个自变量在系数图上共享同一条线,或者可以分组在一起。我尝试使用 jtools
包中的 plot_summs
和其他一些包来执行此操作,但我没有取得太大成功。
我可以单独制作每个图形:
ore <- plot_summs(lval26_imports_tradeonly, lval26_exports_tradeonly, coefs = c("Ore" = "STC_exp", "Ore" = "STC_imp"), model.names = c("STC on importer", "STC on exporter"))
inorganic.chemicals <- plot_summs(lval28_imports_tradeonly, lval28_exports_tradeonly, coefs = c("Inorganic Chemicals" = "STC_exp", "Inorganic Chemicals" = "STC_imp"), model.names = c("STC on importer", "STC on exporter"))
但我希望能够以某种方式将它们结合起来。也许 jtools 包不适合马上使用?
直接用ggplot
就可以了。
下面,我制作了一些看起来与您的属性相似的示例数据。没有你的数据,我无法直接复制你的例子。
library(tibble)
library(dplyr)
library(tidyr)
set.seed(25443)
dat <- tibble(STC_exp = runif(500, -3, 3),
STC_imp = runif(500, -3, 3))
b1 <- runif(33, .1, .5)
b2 <- runif(33, .1, .5)
for(i in 1:33){
dat[[paste0("lval", i)]] <- b1[i] * dat$STC_exp + b2[i] * dat$STC_imp + rnorm(500, 0, .25)
}
将 STC_
变量和所有 lval
变量的数据重塑为 long-format。
library(tidyr)
dat <- dat %>% pivot_longer(cols=c("STC_exp", "STC_imp"), names_to= "ie", values_to = "stc")
dat <- dat %>% pivot_longer(cols=starts_with("lval"), names_to="var", values_to = "lval")
运行 模型并收集输出。
library(purrr)
library(broom)
mods <- dat %>%
group_by(ie, var) %>%
summarise(lm_mod= list(lm(lval ~ stc))) %>%
mutate(tidied = map(lm_mod,tidy,conf.int = TRUE)) %>%
unnest(tidied)
mods <- select(mods, -lm_mod) %>%
filter(term == "stc")
制作情节
library(ggplot2)
mods %>%
mutate(ie = factor(ie, levels=c("STC_exp", "STC_imp"),
labels=c("STC on Exporter", "STC on Importer"))) %>%
ggplot(aes(x=estimate, y=var, colour=ie)) +
geom_point(position = position_dodge(width=.75)) +
geom_errorbarh(aes(xmin=conf.low, xmax=conf.high), position=position_dodge(width=.75), height=0) +
labs(x="Estimate", y="", colour="Model") +
theme_bw()