The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
The ggfixest package provides dedicated
ggplot2 plotting methods for fixest
objects. Specifically, it provides drop-in “gg” equivalents of the
latter’s coefplot
and iplot
base plotting functions.
The goal of ggfixest is to produce nice looking coefficient plots and interaction plots—including event study plots—with minimal effort and scope for further customization.
The stable version of ggfixest is available on CRAN.
install.packages("ggfixest")
Or, you can grab the latest development version from R-universe.
install.packages("ggfixest", repos = "https://grantmcdermott.r-universe.dev")
The package
website provides a number of examples in the help documentation.
(Also available by typing ?ggcoefplot
or
?ggiplot
in your R console.) But here are a few quickstart
examples to whet your appetite.
Start by loading the ggfixest package.
library(ggfixest)
#> Loading required package: ggplot2
#> Loading required package: fixest
Note that this automatically loads ggplot2 and fixest as required dependencies too. As the package name suggests, ggfixest only supports fixest model objects.1
Use ggcoefplot
to draw basic coefficient plots.
= feols(
est ~ Petal.Width + Sepal.Length + Sepal.Width + Species,
Petal.Length data = iris
)
# coefplot(est) ## base version
ggcoefplot(est) ## this package
The above plot call and output should look very familiar to regular
fixest users. Like its base equivalent,
ggcoefplot
can be heavily customized and contains various
shortcuts for common operations. For example, we can use regex to
control the coefficient grouping logic.
ggcoefplot(est, group = list(Sepal = "^^Sepal.", Species = "^^Species"))
The ggiplot
function is a special case of
ggocoefplot
that only plots coefficients with factor levels
or interactions (specifically, those created with the i
operator). This is especially useful for producing event study plots in
a difference-in-differences (DiD) setup.
= feols(y ~ x1 + i(period, treat, 5) | id+period, base_did)
est_did
# iplot(est_did) ## base version
ggiplot(est_did) ## this package
Again, the above plot call and output should look very familiar to
regular fixest users. But note that
ggiplot
supports several features that are not available in
the base iplot
version. For example, plotting multiple
confidence intervals and aggregate treatments effects.
ggiplot(
est_did,ci_level = c(.8, .95),
aggr_eff = "post", aggr_eff.par = list(col = "orange")
)
And you can get quite fancy, combining lists of complex multiple estimation objects with custom themes, and so on.
= base_stagg
base_stagg_grp $grp = ifelse(base_stagg_grp$id %% 2 == 0, 'Evens', 'Odds')
base_stagg_grp
= feols(
est_twfe_grp ~ x1 + i(time_to_treatment, treated, ref = c(-1, -1000)) | id + year,
y data = base_stagg_grp, split = ~grp
)
= feols(
est_sa20_grp ~ x1 + sunab(year_treated, year) | id + year,
y data = base_stagg_grp, split = ~grp
)
ggiplot(
list("TWFE" = est_twfe_grp, "Sun & Abraham (2020)" = est_sa20_grp),
ref.line = -1,
main = "Staggered treatment: Split mutli-sample",
xlab = "Time to treatment",
multi_style = "facet",
geom_style = "ribbon",
facet_args = list(labeller = labeller(id = \(x) gsub(".*: ", "", x))),
theme = theme_minimal() +
theme(
text = element_text(family = "HersheySans"),
plot.title = element_text(hjust = 0.5),
legend.position = "none"
) )
For more ggiplot
examples and comparisons with its base
counterpart, see the detailed vignette
on the package homepage (or, by typing vignette("ggiplot")
in your R console).
For other model classes, a more generic visualization package/tool like see or modelsummary would be more appropriate.↩︎
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.