Studying the behaviour of Kendall random walks

Mateusz Staniak

We will approximate the distribution of moments when the random walk changes state through simulations.

First, we simulate many paths of Kendall random walk with normal step distribution.

library(kendallRandomWalks)
library(dplyr)
library(ggplot2)
set.seed(17)
walks <- simulate_kendall_rw(1000, 1000, rnorm, 0.5, T)

Example trajectory

plot(walks, max_id = 1)

Number of unique states

ggplot(summarise_kendall_rw(walks, n_distinct), aes(x = aggregated)) +
  # geom_histogram() +
  theme_bw() +
  geom_density()

Jumps

diffs <- mutate_kendall_rw(walks, function(x) x - lag(x))
diffs
#> # A tibble: 1,000,000 x 2
#> # Groups:   sim_id [1,000]
#>    sim_id     sim
#>     <int>   <dbl>
#>  1      1  NA    
#>  2      1  -1.02 
#>  3      1   0.   
#>  4      1  -0.478
#>  5      1   3.88 
#>  6      1  -5.04 
#>  7      1  26.0  
#>  8      1   0.   
#>  9      1   0.   
#> 10      1   0.   
#> # ... with 999,990 more rows
diffs2 <- mutate_kendall_rw(walks, function(x) x - lag(x), F)
plot(diffs2, max_id = 10)

Time with no change of state

diffs3 <- mutate_kendall_rw(diffs2, function(x) as.numeric(x != 0), F)
diffs <- diffs3$simulation
diffs <- group_by(diffs, sim_id) %>%
  mutate(id = 1:n())
lengths <- diffs %>%
  filter(sim != 0) %>%
  mutate(previous = ifelse(is.na(lag(id)), 0, lag(id))) %>%
  mutate(length = id - previous)
ggplot(subset(lengths, sim_id < 5), 
       aes(x = length, fill = as.factor(sim_id), group = as.factor(sim_id))) +
  geom_density() +
  theme_bw() +
  ggtitle("Distribution of time with no state-change (by simulation)")

ggplot(lengths, aes(x = length)) +
  geom_density() +
  theme_bw() +
  ggtitle("Distribution of time with no state-change (aggregated)")

ggplot(subset(lengths, sim_id < 10), aes(x = id, y = length, color = as.factor(sim_id))) +
  geom_point() +
  theme_bw() +
  geom_line() +
  ggtitle("Time with no state-change in time")