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
!!!
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.