Lets load in the libraries
library(healthyR.ts)
library(ggplot2)
library(dplyr)
Lets generage data and take a look
<- ts_random_walk()
df head(df)
#> # A tibble: 6 × 4
#> run x y cum_y
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 -0.0613 939.
#> 2 1 2 0.0991 1032.
#> 3 1 3 0.106 1141.
#> 4 1 4 -0.184 931.
#> 5 1 5 0.135 1057.
#> 6 1 6 0.162 1229.
glimpse(df)
#> Rows: 10,000
#> Columns: 4
#> $ run <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
#> $ x <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 1…
#> $ y <dbl> -0.061348028, 0.099083991, 0.106160254, -0.183906330, 0.13492145…
#> $ cum_y <dbl> 938.6520, 1031.6574, 1141.1784, 931.3084, 1056.9619, 1228.6773, …
Now that the data has been generated, lets take a look at it.
%>%
df ggplot(
mapping = aes(
x = x
y = cum_y
, color = factor(run)
, group = factor(run)
,
)+
) geom_line(alpha = 0.8) +
ts_random_walk_ggplot_layers(df)
That is still pretty noisy, so lets see this in a different way. Lets clear this up a bit to make it easier to see the full range of the possible volatility of the random walks.
library(dplyr)
library(ggplot2)
%>%
df group_by(x) %>%
summarise(
min_y = min(cum_y),
max_y = max(cum_y)
%>%
) ggplot(
aes(x = x)
+
) geom_line(aes(y = max_y), color = "steelblue") +
geom_line(aes(y = min_y), color = "firebrick") +
geom_ribbon(aes(ymin = min_y, ymax = max_y), alpha = 0.2) +
ts_random_walk_ggplot_layers(df)
Lets look at volatility from several different percentages.
# Random Walk for volatility range 1-15%
<- ts_random_walk(.sd = 0.01)
df1 <- ts_random_walk(.sd = 0.05)
df2 <- ts_random_walk(.sd = 0.10)
df3 <- ts_random_walk(.sd = 0.15)
df4
# Merge data frames into one
<- dplyr::bind_rows(
df_merged %>% mutate(ver = "A) Vol 1%"),
df1 %>% mutate(ver = "B) Vol 5%"),
df2 %>% mutate(ver = "C) Vol 10%"),
df3 %>% mutate(ver = "D) Vol 15%")
df4
)
# Plot range between minimum and maximum values
%>%
df_merged ggplot(aes(
x = x, y = cum_y,
color = factor(run), group = factor(run)
+
)) geom_line(alpha = 0.8) +
labs(title = "", x = "", y = "") +
facet_wrap(~ver, scales = "free") +
scale_y_continuous(labels = scales::comma) +
theme(legend.position = "none")