Unveiling ‘RandomWalker’: Your Gateway to Tidyverse-Compatible Random Walks

code
rtip
randomwalks
Author

Steven P. Sanderson II, MPH

Published

September 16, 2024

Keywords

Programming, R, RandomWalker R package, Random walks in R, Tidyverse compatible random walks, Brownian motion simulation, Geometric Brownian motion R, Discrete random walk function, Visualize random walks R, Random walk generator functions, How to create random walks using RandomWalker in R, Tidyverse compatible functions for random walk simulations, Simulating financial asset prices with geometric Brownian motion in R, Visualizing random walks with the RandomWalker package, Using RandomWalker for stochastic modeling in R

Introduction

Welcome to the world of ‘RandomWalker’, an innovative R package designed to simplify the creation of various types of random walks. Developed by myself and my co-author, Antti Rask, this package is in its experimental phase but promises to be a powerful tool for statisticians, data scientists, and financial analysts alike. With a focus on Tidyverse compatibility, ‘RandomWalker’ aims to integrate seamlessly into your data analysis workflows, offering both automatic and customizable random walk generation.

Key Features of ‘RandomWalker’

First let’s install and load the package:

# Install the 'RandomWalker' package
devtools::install_github("spsanderson/RandomWalker")

# Load the 'RandomWalker' package
library(RandomWalker)

Or from CRAN:

#install.packages("RandomWalker")

# Load the 'RandomWalker' package
library(RandomWalker)
Warning: package 'RandomWalker' was built under R version 4.3.3

== Welcome to RandomWalker ========================================================
If you find this package useful, please leave a star: 
   https://github.com/spsanderson/RandomWalker

If you encounter a bug or want to request an enhancement please file an issue at:
   https://github.com/spsanderson/RandomWalker/issues

Thank you for using RandomWalker

1. Automatic Random Walks

  • Function: rw30()
    • Syntax: rw30()

    • Examples:

      head(rw30())
      # A tibble: 6 × 3
        walk_number     x     y
        <fct>       <int> <dbl>
      1 1               1 0    
      2 1               2 0.225
      3 1               3 1.57 
      4 1               4 1.84 
      5 1               5 2.04 
      6 1               6 0.785
      rw30() |> visualize_walks()

    This function generates 30 random walks, each consisting of 100 steps. Utilizing the normal distribution, users can specify the mean (mu) and standard deviation (sd) to tailor the walks to their needs. The output is a tibble in a long format, facilitating easy analysis and visualization.

2. Generator Functions for Custom Walks

  • Function: brownian_motion()

    • Syntax:

      brownian_motion(
        .num_walks = 25,
        .n = 100,
        .delta_time = 1,
        .initial_value = 0,
        .return_tibble = TRUE
      )
    • Examples:

      head(brownian_motion())
      # A tibble: 6 × 6
        walk_number     x       y cum_min cum_max cum_mean
        <fct>       <int>   <dbl>   <dbl>   <dbl>    <dbl>
      1 1               1  0       0        0       0     
      2 1               2 -0.0364 -0.0364   0      -0.0182
      3 1               3  0.140  -0.0364   0.140   0.0344
      4 1               4  0.930  -0.0364   0.930   0.258 
      5 1               5  0.848  -0.0364   0.930   0.376 
      6 1               6  0.493  -0.0364   0.930   0.396 
      brownian_motion() |> visualize_walks()

    Simulate Brownian Motion, a continuous-time random process ideal for modeling phenomena such as stock prices and particle movement. The function allows for detailed customization, making it a versatile tool in probability theory and statistical analysis.

  • Function: geometric_brownian_motion()

    • Syntax:

      geometric_brownian_motion(
        .num_walks = 25,
        .n = 100,
        .mu = 0,
        .sigma = 0.1,
        .initial_value = 100,
        .delta_time = 0.003,
        .return_tibble = TRUE
      )
    • Examples:

      head(geometric_brownian_motion())
      # A tibble: 6 × 6
        walk_number     x     y cum_min cum_max cum_mean
        <fct>       <int> <dbl>   <dbl>   <dbl>    <dbl>
      1 1               1 100      200      200     200 
      2 1               2  98.8    199.     200     199.
      3 1               3  99.1    199.     200     199.
      4 1               4  99.5    199.     200     199.
      5 1               5  99.5    199.     200     199.
      6 1               6  98.8    199.     200     199.
      geometric_brownian_motion() |> visualize_walks()

    Widely used in finance, this function models the stochastic process of asset prices. It allows for the simulation and estimation of parameters, aiding in the analysis of financial assets and investment decision-making.

  • Function: discrete_walk()

    • Syntax:

      discrete_walk(
        .num_walks = 25,
        .n = 100,
        .upper_bound = 1,
        .lower_bound = -1,
        .upper_probability = 0.5,
        .initial_value = 100
      )
    • Examples:

      head(discrete_walk())
      # A tibble: 6 × 8
        walk_number     x     y cum_sum cum_prod cum_min cum_max cum_mean
        <fct>       <int> <dbl>   <dbl>    <dbl>   <dbl>   <dbl>    <dbl>
      1 1               1    -1      99        0      99      99     99  
      2 1               2     1     100        0      99     101    100  
      3 1               3    -1      99        0      99     101     99.7
      4 1               4     1     100        0      99     101    100  
      5 1               5    -1      99        0      99     101     99.8
      6 1               6     1     100        0      99     101    100  
      discrete_walk() |> visualize_walks()

    This function offers the ability to simulate discrete random walks with user-defined parameters such as the number of simulations, total time, and probability of upward movement. The results are comprehensive, providing insights into the cumulative sum, product, minimum, and maximum of the steps.

  • Function: random_normal_drift_walk()

    • Syntax:

      random_normal_drift_walk(
        .num_walks = 25,
        .n = 100,
        .mu = 0,
        .sd = 1,
        .drift = 0.1,
        .initial_value = 0
      )
    • Examples:

      head(random_normal_drift_walk())
      # A tibble: 6 × 8
        walk_number     x       y cum_sum cum_prod cum_min cum_max cum_mean
        <fct>       <int>   <dbl>   <dbl>    <dbl>   <dbl>   <dbl>    <dbl>
      1 1               1  0.0627  0.0627        0  0.0627  0.0627   0.0627
      2 1               2 -2.96   -2.89          0 -2.96    0.0627  -1.45  
      3 1               3  0.184  -2.71          0 -2.96    0.184   -0.904 
      4 1               4 -1.50   -4.21          0 -2.96    0.184   -1.05  
      5 1               5  0.355  -3.86          0 -2.96    0.355   -0.772 
      6 1               6 -0.856  -4.71          0 -2.96    0.355   -0.786 
      random_normal_drift_walk() |> visualize_walks()

    Generate random walks with a specified drift, adding a deterministic trend to the stochastic process. This function is particularly useful for modeling scenarios where a consistent directional movement is expected.

  • Function: random_normal_walk()

    • Syntax:

      random_normal_walk(
        .num_walks = 25,
        .n = 100,
        .mu = 0,
        .sd = 0.1,
        .initial_value = 0,
        .samp = TRUE,
        .replace = TRUE,
        .sample_size = 0.8
      )
    • Examples:

      head(random_normal_walk())
      # A tibble: 6 × 8
        walk_number     x       y  cum_sum cum_prod cum_min cum_max  cum_mean
        <fct>       <int>   <dbl>    <dbl>    <dbl>   <dbl>   <dbl>     <dbl>
      1 1               1 -0.119  -0.119          0  -0.119 -0.119  -0.119   
      2 1               2 -0.0814 -0.200          0  -0.119 -0.0814 -0.100   
      3 1               3  0.186  -0.0142         0  -0.119  0.186  -0.00473 
      4 1               4  0.0569  0.0427         0  -0.119  0.186   0.0107  
      5 1               5 -0.0398  0.00289        0  -0.119  0.186   0.000579
      6 1               6 -0.0537 -0.0508         0  -0.119  0.186  -0.00847 
      random_normal_walk() |> visualize_walks()

    Create multiple random walks with customizable parameters, including the number of walks, steps, and distribution characteristics. The function supports sampling with or without replacement, offering flexibility in simulation design.

3. Visualization Capabilities

  • Function: visualize_walks() This function provides a straightforward way to visualize the generated random walks, enhancing the interpretability of the data and aiding in the presentation of results.

Why Choose ‘RandomWalker’?

‘RandomWalker’ stands out due to its Tidyverse compatibility, ensuring that it integrates smoothly with other popular R packages. This compatibility not only streamlines the workflow but also enhances the package’s utility in data manipulation and visualization tasks.

Conclusion

As ‘RandomWalker’ continues to evolve, it promises to be an indispensable tool for those interested in the stochastic modeling of random processes. Whether you’re exploring financial markets, conducting scientific research, or simply experimenting with random walks, this package offers the flexibility and power you need.

FAQs

Q1: Is ‘RandomWalker’ suitable for beginners in R?

A1: Yes, ‘RandomWalker’ is designed to be user-friendly, with functions that are easy to understand and integrate into existing workflows.

Q2: Can I use ‘RandomWalker’ for financial modeling?

A2: Absolutely. Functions like geometric_brownian_motion() are specifically tailored for financial applications, making it ideal for modeling asset prices.

Q3: How does ‘RandomWalker’ ensure compatibility with Tidyverse?

A3: The package is built with Tidyverse principles in mind, ensuring that its functions return tibbles and work seamlessly with other Tidyverse packages.

Feel free to explore ‘RandomWalker’ and contribute to its development as we continue to refine and expand its capabilities. Your feedback and suggestions are invaluable as we strive to make this package a cornerstone in the R community.