模拟随机游走

use*_*124 10 r random-walk

Xn可以取值-1或1,概率为0.5.并且Sn = Sn-1 + Xn如何计算在Sn = X1 + X2 + ::: + Xn给出的时刻n观察到的部分和.我想在这里模拟随机游走.我做了以下但我不确定它是对的:

rw <- function(n){
    x=numeric(n)
    xdir=c(TRUE, FALSE)
    step=c(1,-1)
    for (i in 2:n)
    if (sample(xdir,1)) {
        x[i]=x[i-1]+sample(step,1)
    } else {
        x[i]=x[i-1]
    }
    list(x=x)
}
Run Code Online (Sandbox Code Playgroud)

请帮忙!

Jak*_*ead 43

你也可以真正简洁有效地完成这项工作 cumsum

set.seed(1)

n <- 1000
x <- cumsum(sample(c(-1, 1), n, TRUE))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • imo这是做到这一点的方式 - 除了由于矢量化(在我的计算机上1000000长度步行上快44倍)之外它还要快得多,它还是一个1-liner. (2认同)

Chr*_*den 4

这个答案只是为了解释为什么你的代码不起作用。@jake-burkhead 给出了您实际编写代码的方式。

在此代码中,您只需执行一半的时间。这是因为您正在抽样来xdir决定是否搬家。相反,我会在循环中推荐以下内容:

for(i in 2:n){
  x[i] <- x[i - 1] + sample(step, 1)
}
Run Code Online (Sandbox Code Playgroud)

sample(step, 1)调用决定步行是否移动1-1

要计算部分和,您可以cumsum()在生成 后使用x。结果将是步行中给定点的部分和的向量。