knitr::opts_chunk$set( collapse = TRUE, comment = "#>", message = FALSE, fig.width = 10 )
library(exuber) options(exuber.show_progress = FALSE) library(dplyr) library(ggplot2) library(tidyr)
options(exuber.parallel = FALSE)
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) sims <- tibble( sim_psy1 = sim_psy1(100), sim_psy2 = sim_psy2(100), sim_evans = sim_blan(100), sim_blan = sim_evans(100), ) # Esimation estimation <- radf(sims, lag = 1) # Critical Values crit_values <- radf_mc_cv(nrow(sims))
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.
joined <- augment_join(estimation, crit_values) joined
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")
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.
distr <- radf_mc_distr(n = 300) 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%) positive_series <- diagnostics(estimation, crit_values)$positive # Through a loop on positive series plot_list1 <- list() for (as in positive_series) { plot_list1[[as]] <- autoplot(estimation, crit_values, select_series = as) } # Alternatively with lapply plot_list2 <- lapply(positive_series, function(x) autoplot(estimation, crit_values, select_series = x)) 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
plot_list1[[1]] <- plot_list1[[1]] + theme_classic()
and then reconstruct the plot with grid.arrange
or some other function that arranges all plots into a single grob.
Enjoy Plotting with exuber
!!!
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.