如何在R中重复1000次这个随机漫步模拟?

7
我正在模拟一维对称随机游走过程:
y[t] = y[t-1] + epsilon[t]

在时间段t中,白噪声用epsilon[t] ~ N(0,1)表示。在这个过程中没有漂移。

此外,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[i,t]系列 (i=1,…,1000; t=1,…,1000)。 (之后,我将检查在t=3t=5t=10时回到原点 (y[1]=0) 的概率。)
哪个函数可以让我用随机游走时间序列y[t]进行这种重复?

1
我同意@Tim的看法 - 但我认为这是一个在stackoverflow上提问的好问题。我们能把这个问题转移到那里吗? - Jeremias K
1个回答

7

由于 y[t] = y[0] + sum epsilon[i],其中 sum 是从 i=1i=t 求和,所以可以一次性计算序列 y[t],例如使用 R 中的 cumsum 函数。然后,将该序列重复 T=10³ 次就很简单了:

N=T=1e3
y=t(apply(matrix(sample(c(-1,1),N*T,rep=TRUE),ncol=T),1,cumsum))

由于y的每一行都是一个模拟的随机游走序列。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接