gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:17:49 24 4
gpt4 key购买 nike

我编写了以下代码来模拟 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)}。为什么是这样?我的代码逻辑有错误吗?

最佳答案

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

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

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

关于r - 为什么我的随机游走模拟不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59449692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com