The goal of ggtails is to make the use of fat tails specific plots as
easy as possible within the usual ggplot2
framework. To do so, I took
the computational steps in the great evir
package and turned them into
ggplot2
stats.
Check this blogpost for an intuitive explanation of these types of plots.
# install.packages("devtools")
devtools::install_github("David-Salazar/ggtails")
For example, you can create a zipf plot for different random variables
in the same way as would use stat_qq()
library(ggtails)
library(tidyverse)
gaussian <- rnorm(10000)
lognormal <- rlnorm(10000)
exponential <- rexp(10000)
pareto <- 1/(runif(10000))^(1/1.16) # inverse transform sampling
tibble(sim = 1:10000, lognormal, exponential, pareto) %>%
pivot_longer(-sim, names_to = "random_variable", values_to = "value") %>%
ggplot(aes(sample = value, color = random_variable)) +
stat_zipf(alpha = 0.1) +
scale_x_log10() +
scale_y_log10() +
theme_minimal() +
labs(title = "Zipf plot in ggplot2 workflow",
x = "Log(x)",
y = "Log(Survival(x))")
In the same way, we can create a mean excess plot:
tibble(sim = 1:10000, gaussian, lognormal, exponential, pareto) %>%
pivot_longer(-sim, names_to = "random_variable", values_to = "value") %>%
ggplot(aes(sample = value)) +
stat_mean_excess(alpha = 0.1) +
facet_wrap(~random_variable, scales = "free") +
theme_minimal() +
labs(title = "Mean Excess plot works with facetting!")
Finally, we can perform a visual examination of fat-tailedness by examining the convergence of moments with the max-to-sum plots. For finite moments, the ratio should converge to 0.
tibble(sim = 1:10000, gaussian, lognormal, exponential, pareto) %>%
pivot_longer(-sim, names_to = "random_variable", values_to = "value") %>%
ggplot(aes(sample = value)) +
stat_max_sum_ratio_plot(p = 4) +
facet_wrap(~random_variable) +
theme_minimal()