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,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,col = "red",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,lty = "solid")

enter image description here

ggplot2 解决方案可能如下。但是数据格式应该是长格式,数据是宽格式。请参阅this post,了解如何将数据从宽格式重新调整为长格式。

library(tidyverse)

as.data.frame(RW) %>%
  mutate(x = row_number()) %>%
  pivot_longer(-x) %>%
  ggplot(aes(x,value,color = name)) +
  geom_line()

enter image description here


至于随机游走的前两个时刻,请参阅数学堆栈交换的 this post