如何在R中重复1000次这种随机游走模拟?

时间:2016-02-21 10:59:03

标签: r sampling

我模拟了一维对称的随机游走过程:

$$y_t=y_{t-1}+\varepsilon_t$$

其中白噪声在时间段$\varepsilon_t \sim N(0,1)$中由$t$表示。这个过程没有任何偏差。

此外,RW是对称的,因为$Pr(y_i=+1)=Pr(y_i=-1)=0.5$.

这是我在R中的代码:

set.seed(1)
t=1000
epsilon=sample(c(-1,1), t, replace = 1)

y<-c()
y[1]<-0
for (i in 2:t) {
  y[i]<-y[i-1]+epsilon[i]
}
par(mfrow=c(1,2))
plot(1:t, y, type="l", main="Random walk")
outcomes <- sapply(1:1000, function(i) cumsum(y[i]))
hist(outcomes)

我想模拟1000个不同的$y_{it}$ series (i=1,...,1000;t=1,...,1000)。 (在此之后,我会检查($y_1=0$)

处返回原点$t=3$, $t=5$ and $t=10$.的可能性

哪个函数允许我用$y_t$随机游走时间序列进行这种重复?

1 个答案:

答案 0 :(得分:1)

尝试以下方法:

length_of_time_series <- 1000
num_replications <- 1000

errors <- matrix(rnorm(length_of_time_series*num_replications),ncol=num_replications)
rw <- apply(errors, 2, cumsum)

通过首先定义填充了从标准正态分布绘制的白噪声误差项的矩阵,同时创建1000个随机行走,并且在第二步中我计算累积总和,其应该对应于随机行走,假设{{{ 1}}。

请注意,我忽略了您的错误是-1或1,因为我不确定这是您的意图。话虽如此,您可以使用以下行轻松调整上述代码,以创建1或-1的错误:

y_0=0

如果您真的想要反复进行而不是同时进行,可以定义一个返回随机游走的函数,然后使用 errors2 <- ifelse(errors > 0, 1, -1) 。请注意,您不应该对函数内部的种子进行硬编码,以避免始终复制相同的随机游走。