The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
Quick answers to common questions about RandomWalker.
RandomWalker is an R package for generating, visualizing, and analyzing random walks. It supports 27+ probability distributions, multi-dimensional walks (1D, 2D, 3D), and provides tidyverse-compatible functions for data manipulation and analysis.
RandomWalker is useful for: - Researchers: Modeling stochastic processes, simulating experiments - Students: Learning probability and statistics - Data Scientists: Generating synthetic data, testing algorithms - Financial Analysts: Modeling asset prices, risk analysis - Physicists/Biologists: Simulating particle movement, organism behavior - Educators: Teaching probability concepts
Yes! RandomWalker is open-source software licensed under the MIT License. You can use it freely for academic, commercial, or personal projects.
RandomWalker requires R version 4.1.0 or higher.
It depends on your use case:
random_normal_walk()geometric_brownian_motion()brownian_motion()discrete_walk()random_cauchy_walk() or
random_t_walk()random_poisson_walk()random_normal_walk() and
brownian_motion()?Both use normal distributions, but: -
random_normal_walk(): Discrete steps, cumulative sum -
brownian_motion(): Continuous-time stochastic process,
includes drift (μ) and volatility (σ) parameters
For most purposes, they’re similar. Use
brownian_motion() for financial modeling.
brownian_motion() and
geometric_brownian_motion()?Brownian Motion: Can go negative, additive process
X(t) = X(0) + μt + σW(t)Geometric Brownian Motion: Always positive, multiplicative process
X(t) = X(0) exp((μ - σ²/2)t + σW(t))Use Geometric Brownian Motion for modeling stock prices (can’t go negative).
Add .dimensions = 2:
random_normal_walk(.num_walks = 10, .n = 100, .dimensions = 2)
#> # A tibble: 800 × 14
#> walk_number step_number x y cum_sum_x cum_prod_x cum_min_x
#> <fct> <int> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 -0.220 -0.119 -0.220 0 -0.220
#> 2 1 2 -0.0624 0.0535 -0.283 0 -0.220
#> 3 1 3 -0.220 0.179 -0.503 0 -0.220
#> 4 1 4 0.146 0.0317 -0.357 0 -0.220
#> 5 1 5 -0.0783 -0.0700 -0.435 0 -0.220
#> 6 1 6 -0.147 -0.00606 -0.582 0 -0.220
#> 7 1 7 -0.00374 -0.0842 -0.586 0 -0.220
#> 8 1 8 0.170 -0.115 -0.416 0 -0.220
#> 9 1 9 -0.0349 0.0425 -0.451 0 -0.220
#> 10 1 10 -0.0472 -0.119 -0.498 0 -0.220
#> # ℹ 790 more rows
#> # ℹ 7 more variables: cum_max_x <dbl>, cum_mean_x <dbl>, cum_sum_y <dbl>,
#> # cum_prod_y <dbl>, cum_min_y <dbl>, cum_max_y <dbl>, cum_mean_y <dbl>library(ggplot2)
walk_2d <- random_normal_walk(.num_walks = 10, .n = 100, .dimensions = 2)
ggplot(walk_2d, aes(x = cum_sum_x, y = cum_sum_y, color = walk_number)) +
geom_path() +
coord_equal() +
theme_minimal()y is the random value,
x is renamed to step_numberx and y are the two
spatial dimensionsx, y, and
z are the three spatial dimensionsAdd .interactive = TRUE:
Use .pluck:
# Multiple panels
random_normal_walk() |> visualize_walks(.pluck = c("y", "cum_sum_y", "cum_mean_y"))Use .alpha:
walks <- rw30()
# Overall summary
walks |> summarize_walks(.value = y)
#> Warning: There was 1 warning in `dplyr::summarize()`.
#> ℹ In argument: `geometric_mean = exp(mean(log(y)))`.
#> Caused by warning in `log()`:
#> ! NaNs produced
#> # A tibble: 1 × 16
#> fns fns_name dimensions mean_val median range quantile_lo quantile_hi
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 rw30 Rw30 1 -1.09 -1.02 46.9 -12.6 11.5
#> # ℹ 8 more variables: variance <dbl>, sd <dbl>, min_val <dbl>, max_val <dbl>,
#> # harmonic_mean <dbl>, geometric_mean <dbl>, skewness <dbl>, kurtosis <dbl># By walk
walks |> summarize_walks(.value = y, .group_var = walk_number) |> head()
#> Warning: There were 29 warnings in `dplyr::summarize()`.
#> The first warning was:
#> ℹ In argument: `geometric_mean = exp(mean(log(y)))`.
#> ℹ In group 1: `walk_number = 1`.
#> Caused by warning in `log()`:
#> ! NaNs produced
#> ℹ Run `dplyr::last_dplyr_warnings()` to see the 28 remaining warnings.
#> # A tibble: 6 × 17
#> walk_number fns fns_name dimensions mean_val median range quantile_lo
#> <fct> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1 rw30 Rw30 1 5.98 7.45 20.1 -3.74
#> 2 2 rw30 Rw30 1 -4.14 -4.44 9.07 -7.77
#> 3 3 rw30 Rw30 1 -6.56 -6.94 11.7 -10.9
#> 4 4 rw30 Rw30 1 -1.04 -1.05 6.63 -3.40
#> 5 5 rw30 Rw30 1 2.89 2.22 17.4 -3.46
#> 6 6 rw30 Rw30 1 -4.08 -4.59 14.0 -9.72
#> # ℹ 9 more variables: quantile_hi <dbl>, variance <dbl>, sd <dbl>,
#> # min_val <dbl>, max_val <dbl>, harmonic_mean <dbl>, geometric_mean <dbl>,
#> # skewness <dbl>, kurtosis <dbl>walks <- rw30()
# Get walk with maximum final value
max_walk <- walks |> subset_walks(.value = "y", .type = "max")
# Get walk with minimum final value
min_walk <- walks |> subset_walks(.value = "y", .type = "min")
# Visualize both walks together
combined <- dplyr::bind_rows(
dplyr::mutate(max_walk, type = "Maximum"),
dplyr::mutate(min_walk, type = "Minimum")
)
visualize_walks(combined, .pluck = "y") +
ggplot2::facet_wrap(~type)This depends on your system, but RandomWalker can handle: - Light: 1,000 walks × 1,000 steps each - Moderate: 10,000 walks × 10,000 steps each - Heavy: 100,000+ walks with careful memory management
.alpha = 0.2.interactiveA tibble (tidyverse-compatible data frame) with columns: -
walk_number (factor) - step_number (integer) -
Value columns (y for 1D, x/y for
2D, x/y/z for 3D) - Cumulative
function columns
You forgot to specify .value in
summarize_walks():
Yes! RandomWalker is designed for tidyverse:
library(dplyr)
random_normal_walk(.num_walks = 10) |>
filter(step_number > 50) |>
mutate(positive = cum_sum_y > 0) |>
group_by(walk_number) |>
summarize(prop_positive = mean(positive))
#> # A tibble: 10 × 2
#> walk_number prop_positive
#> <fct> <dbl>
#> 1 1 0.9
#> 2 2 1
#> 3 3 1
#> 4 4 1
#> 5 5 1
#> 6 6 0
#> 7 7 1
#> 8 8 0
#> 9 9 1
#> 10 10 0.1Yes:
library(shiny)
library(RandomWalker)
ui <- fluidPage(
numericInput("num_walks", "Number of Walks:", 10),
plotOutput("walks_plot")
)
server <- function(input, output) {
output$walks_plot <- renderPlot({
random_normal_walk(.num_walks = input$num_walks) |>
visualize_walks(.pluck = "cum_sum_y")
})
}
shinyApp(ui, server)Use Geometric Brownian Motion:
stock_prices <- geometric_brownian_motion(
.num_walks = 100,
.n = 252, # Trading days
.mu = 0.08, # 8% expected return
.sigma = 0.25, # 25% volatility
.initial_value = 100
)
visualize_walks(stock_prices)Use Brownian Motion in 2D or 3D:
randomwalker tag)Yes! Join us on: - GitHub Discussions - Follow @steveondata on Telegram
Yes! We welcome contributions: - Bug reports - Feature requests - Code contributions - Documentation improvements - Examples and tutorials
Open an issue on GitHub Issues with: - Clear description of the feature - Use cases - Example code (if applicable)
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.