为什么我的随机行走模拟不能正常工作?

时间:2019-12-23 02:52:19

标签: r simulation random-walk

我编写了以下代码来模拟Z ^ 2上的无偏随机游动。以1/4的概率,“目标”应该向上,向左,向右或向下移动一个单位。因此,我将“目标”制成一个具有两列的矩阵,一列用于x坐标,一列用于y坐标,然后根据runif(1)的值递增/递减适当的坐标。

N_trials <- 10
N_steps <- 10
destination <- matrix(0,N_trials,2)
for(n in 1:N_steps) {

    p <- runif(1)
    if(p < 1/4) {
      destination[n,1] <- destination[n,1] - 1
    }
    else if(p < 1/2) {
      destination[n,1] <- destination[n,1] + 1
    }
    else if(p < 3/4) {
      destination[n,2] <- destination[n,2] + 1
    }
    else if(p < 1) {
      destination[n,2] <- destination[n,2] - 1
    }
  }

但是,该过程似乎从未移出集合{(0,0),(1,0),(-1,0),(0,1),(0,-1)}。为什么是这样?我的代码逻辑上有错误吗?

2 个答案:

答案 0 :(得分:3)

这就是我所拥有的---这就是您的想法吗?

set.seed(1)

N_trials <- 10
N_steps <- 10
destination <- matrix(0, N_trials, 2)

for(n in 1:(N_steps-1)) {
  p <- runif(1)
  if(p < 1/4) {
    destination[n+1,1] <- destination[n,1] - 1
    destination[n+1,2] <- destination[n,2]
  }
  else if(p < 1/2) {
    destination[n+1,1] <- destination[n,1] + 1
    destination[n+1,2] <- destination[n,2]
  }
  else if(p < 3/4) {
    destination[n+1,1] <- destination[n,1]
    destination[n+1,2] <- destination[n,2] + 1
  }
  else if(p < 1) {
    destination[n+1,1] <- destination[n,1]
    destination[n+1,2] <- destination[n,2] - 1
  }
}

destination

      [,1] [,2]
 [1,]    0    0
 [2,]    1    0
 [3,]    2    0
 [4,]    2    1
 [5,]    2    0
 [6,]    1    0
 [7,]    1   -1
 [8,]    1   -2
 [9,]    1   -1
[10,]    1    0

答案 1 :(得分:3)

您可以向量化随机游走,而不是使用循环。

想法是首先创建一个可能步骤的矩阵:

steps <- matrix(c(0,0,-1,1,-1,1,0,0),nrow = 4)

这是:

     [,1] [,2]
[1,]    0   -1
[2,]    0    1
[3,]   -1    0
[4,]    1    0

然后您可以在其中添加随机下标:

steps[sample(1:4,10,replace = TRUE),]
例如,

将创建一个9行的矩阵,其中每行都是从steps矩阵中随机选择的。

如果您以rbind为起始位置c(0,0),然后以每一列的累积总和(cumsum)为例,那么您便会步步为营。您可以将所有内容包装在一个函数中:

rand.walk <- function(n){
  steps <- matrix(c(0,0,-1,1,-1,1,0,0),nrow = 4)
  walk <- steps[sample(1:4,n,replace = TRUE),]
  walk <-rbind(c(0,0),walk)
  apply(walk,2,cumsum)
}

例如,plot(rand.walk(1000),type = 'l')生成的图形如下所示:

enter image description here