R中的随机游走模拟
Random Walk Simulation in R
我正在尝试在 R 中绘制多个简单的随机游走,但在这样做时遇到了问题。
请注意,我所说的简单随机游走是指随机变量的总和,它可以是 {-1} 或 {1},每个值具有相同的概率,而不是一些放弃白噪声的随机游走。 (参见 https://en.wikipedia.org/wiki/Random_walk#One-dimensional_random_walk 上的定义)
我使用以下代码绘制随机游走:
set.seed(1)
n <- 200
Random_Walk<- cumsum(sample(c(-1, 1), n, TRUE))
n <- 200
Random_Walk_2 <- cumsum(sample(c(-1, 1), n, TRUE))
ts.plot(Random_Walk, gpars=list(xlab="Length of Random Walk", ylab="Distance from origin",lty=c(1:1)))
此代码工作正常,但一旦我尝试在同一个图中绘制两个随机游走,它就会中断。
有人可以解释我如何在一张图中绘制它们甚至多个随机游走吗?
此外,我想知道是否有一些工具可以为我提供所有这些随机游走的方差或标准差
先谢谢大家!!
这是 R-base
中的可能解决方案
plot(Random_Walk, type = "l", xlim = c(0, 200), ylim = c(-15, 15),
col = "blue", xlab = "n", ylab = "Rw")
par(new=T)
plot(Random_Walk_2, type = "l", xlim = c(0, 200), ylim = c(-15, 15),
col = "red", xlab = "n", ylab = "Rw")
这是 ggplot2
的可能解决方案:
library(ggplot2)
df_rw <- data.frame(n = 1:200, r1 = Random_Walk, r2 = Random_Walk_2)
ggplot(df_rw) +
geom_line(aes(n, r1), col = "blue") +
geom_line(aes(n, r2), col = "red") +
labs(x = "n", y = "Rw")
这是另一个可能的解决方案 ggplot2
library(ggplot2)
df_rw2 <- data.frame(n = c(1:200, 1:200),
rw = c(Random_Walk, Random_Walk_2),
lab = rep(c("Random Walk 1", "Random Walk 2"), each = 200))
ggplot(df_rw2) +
geom_line(aes(x = n, y = rw, color = lab)) +
scale_color_manual(values = c("red", "blue"))
这是一个简单的基础 R 解决方案,其中包含多次被遗忘的函数 matplot
。
RW <- cbind(Random_Walk, Random_Walk_2)
matplot(RW, type = "l", lty = "solid")
ggplot2
解决方案可能如下所示。但是数据格式应该是长格式,数据是宽格式。请参阅 this post 了解如何将数据从宽格式重塑为长格式。
library(tidyverse)
as.data.frame(RW) %>%
mutate(x = row_number()) %>%
pivot_longer(-x) %>%
ggplot(aes(x, value, color = name)) +
geom_line()
至于随机游走的第 2 个时刻,请参见 Mathematics Stack Exchange 的 this post。
我正在尝试在 R 中绘制多个简单的随机游走,但在这样做时遇到了问题。
请注意,我所说的简单随机游走是指随机变量的总和,它可以是 {-1} 或 {1},每个值具有相同的概率,而不是一些放弃白噪声的随机游走。 (参见 https://en.wikipedia.org/wiki/Random_walk#One-dimensional_random_walk 上的定义)
我使用以下代码绘制随机游走:
set.seed(1)
n <- 200
Random_Walk<- cumsum(sample(c(-1, 1), n, TRUE))
n <- 200
Random_Walk_2 <- cumsum(sample(c(-1, 1), n, TRUE))
ts.plot(Random_Walk, gpars=list(xlab="Length of Random Walk", ylab="Distance from origin",lty=c(1:1)))
此代码工作正常,但一旦我尝试在同一个图中绘制两个随机游走,它就会中断。 有人可以解释我如何在一张图中绘制它们甚至多个随机游走吗?
此外,我想知道是否有一些工具可以为我提供所有这些随机游走的方差或标准差
先谢谢大家!!
这是 R-base
plot(Random_Walk, type = "l", xlim = c(0, 200), ylim = c(-15, 15),
col = "blue", xlab = "n", ylab = "Rw")
par(new=T)
plot(Random_Walk_2, type = "l", xlim = c(0, 200), ylim = c(-15, 15),
col = "red", xlab = "n", ylab = "Rw")
这是 ggplot2
的可能解决方案:
library(ggplot2)
df_rw <- data.frame(n = 1:200, r1 = Random_Walk, r2 = Random_Walk_2)
ggplot(df_rw) +
geom_line(aes(n, r1), col = "blue") +
geom_line(aes(n, r2), col = "red") +
labs(x = "n", y = "Rw")
这是另一个可能的解决方案 ggplot2
library(ggplot2)
df_rw2 <- data.frame(n = c(1:200, 1:200),
rw = c(Random_Walk, Random_Walk_2),
lab = rep(c("Random Walk 1", "Random Walk 2"), each = 200))
ggplot(df_rw2) +
geom_line(aes(x = n, y = rw, color = lab)) +
scale_color_manual(values = c("red", "blue"))
这是一个简单的基础 R 解决方案,其中包含多次被遗忘的函数 matplot
。
RW <- cbind(Random_Walk, Random_Walk_2)
matplot(RW, type = "l", lty = "solid")
ggplot2
解决方案可能如下所示。但是数据格式应该是长格式,数据是宽格式。请参阅 this post 了解如何将数据从宽格式重塑为长格式。
library(tidyverse)
as.data.frame(RW) %>%
mutate(x = row_number()) %>%
pivot_longer(-x) %>%
ggplot(aes(x, value, color = name)) +
geom_line()
至于随机游走的第 2 个时刻,请参见 Mathematics Stack Exchange 的 this post。