The new design offers full flexibility and customization to produce
publication-ready plots. exuber
used to plot graph
individually in a list, and then you could modify each plot and arrange
them into a single grob with ggarrange()
(which now is
defunct). However, newer versions of exuber focus on providing a faceted
plot as it easier to change the aesthetics and themes.
Let’s start by simulating some data.
set.seed(123)
<- tibble(
sims sim_psy1 = sim_psy1(100),
sim_psy2 = sim_psy2(100),
sim_evans = sim_blan(100),
sim_blan = sim_evans(100),
)
# Esimation
<- radf(sims, lag = 1)
estimation
# Critical Values
<- radf_mc_cv(nrow(sims)) crit_values
The visual output of autoplot in v0.4.0
is exactly the
same as before.
autoplot(estimation, crit_values)
However, almost all aspects of the plot can be easily changed.
The custom color for autoplot are “blue and”red”, however the user
can easily override this option with
ggplot2::scale_color_manual
.
autoplot(estimation, crit_values) +
scale_color_manual(values = c("grey","black")) +
theme_classic()
shade_opt
allows the user to manipulate the
geom_rect()
layer of the ggplot, using the
shade
function. Alternatively, it can be omitted if it set
to NULL
.
autoplot(estimation, crit_values, shade_opt = shade(fill = "pink", opacity = 0.3))
Custom plotting is also very easy with the
augment_join()
, that merge the output of the estimation and
and critical values in a ggplot2-friendly way.
<- augment_join(estimation, crit_values)
joined
joined#> # A tibble: 1,926 × 8
#> key index id data stat tstat sig crit
#> <int> <dbl> <fct> <dbl> <fct> <dbl> <fct> <dbl>
#> 1 21 21 sim_psy1 119. badf -2.08 90 -0.44
#> 2 22 22 sim_psy1 112. badf -2.31 90 -0.44
#> 3 23 23 sim_psy1 111. badf -2.39 90 -0.44
#> 4 24 24 sim_psy1 104. badf -2.26 90 -0.44
#> 5 25 25 sim_psy1 98.6 badf -2.08 90 -0.44
#> 6 26 26 sim_psy1 94.3 badf -1.79 90 -0.44
#> 7 27 27 sim_psy1 82.9 badf -1.00 90 -0.44
#> 8 28 28 sim_psy1 88.6 badf -1.34 90 -0.44
#> 9 29 29 sim_psy1 89.6 badf -1.28 90 -0.44
#> 10 30 30 sim_psy1 81.9 badf -0.800 90 -0.44
#> # … with 1,916 more rows
The output of augment_join
returns data in tidy format
and offers full flexibility to the user. After this point plotting
becomes extremely trivial.
%>%
joined ggplot(aes(x = index)) +
geom_line(aes(y = tstat)) +
geom_line(aes(y = crit)) +
facet_grid(sig + stat ~ id , scales = "free_y")
#> Warning: Removed 1 row containing missing values (`geom_line()`).
#> Removed 1 row containing missing values (`geom_line()`).
We also offer two functions scale_exuber_manual
and
theme_exuber
that offer some extra functionality.
%>%
joined pivot_longer(cols = c("tstat", "crit"), names_to = "nms") %>%
ggplot(aes(x = index, y = value, col = nms)) +
geom_line() +
facet_grid(sig + stat ~ id , scales = "free_y") +
scale_exuber_manual() +
theme_exuber()
In addition to critical values, we can also calculate the empirical distribution by utilizing the family of *_distr functions. For example if we can simulate the distribution of the supADF tests with Monte Carlo method.
<- radf_mc_distr(n = 300)
distr autoplot(distr)
This part is made just for fun.
library(tidyr)
%>%
distr tidy() %>%
rename_all(~ stringr::str_to_upper(.)) %>%
gather(Statistic, value, factor_key = TRUE) %>%
ggplot(aes(value, color = Statistic)) +
stat_ecdf() +
ggtitle("Empirical Cumulative Distribution") +
geom_hline(yintercept = 0.95, linetype = "dashed") + theme_bw()
To return to the old functionality there are several ways.
library(gridExtra)
# To choose only positive series (i.e. statistically significant for 5%)
<- diagnostics(estimation, crit_values)$positive
positive_series
# Through a loop on positive series
<- list()
plot_list1 for (as in positive_series) {
<- autoplot(estimation, crit_values, select_series = as)
plot_list1[[as]]
}
# Alternatively with lapply
<- lapply(positive_series, function(x) autoplot(estimation, crit_values, select_series = x))
plot_list2 names(plot_list2) <- positive_series
do.call(gridExtra::grid.arrange, plot_list1)
With the old functionality you had to make changes one at a time
1]] <- plot_list1[[1]] + theme_classic() plot_list1[[
and then reconstruct the plot with grid.arrange
or some
other function that arranges all plots into a single grob.
Enjoy Plotting with exuber
!!!