在 R 中模拟 2D 偏置随机游走
Simulate 2D biased random walk in R
在 R 中,您如何模拟一个离散的有偏随机游走,其中有一组点被代理吸引?
答案最好包括一个控制粒子扩散率的项。
谢谢!
调整来自 https://stat.ethz.ch/pipermail/r-help/2010-December/261947.html
的代码
然后您可以添加一个循环遍历数组的条件函数。如果粒子位置在半径内(或本例中的正方形)
- 您可以添加第二个随机事件,如果此为真,粒子将朝该方向多走一步,如果为假 - 则不会。
RW2D<-function(N) { i<-0 xdir<-0 ydir<-0 xpos<-vector() xpos[1]<-xdir ypos<-vector() ypos[1]<-ydir for (i in 1:N-1)
attraction_points <- my.array <- array(1:24, dim=c(2))
{
r<-runif(1)
if(r<=0.25) {xdir<-xdir+1}
if(r>0.25 && r<=0.5) {xdir<-xdir-1}
if(r>0.5 && r<=0.75) {ydir<-ydir +1}
if(r>0.75) {ydir<-ydir-1}
for (j in 1:24){
if ( abs(attraction_points[j,0]-xpos) < 4 ){
if ( abs(attraction_points[j,1]-ypos) < 4 ){
if(runif(1)<=0.5) {xdir<-xdir+ 1*sign(attraction_points[j,0]-xpos)}
if(runif(1)<=0.5) {ydir<-ydir+ 1*sign(attraction_points[j,1]-ypos)}
}
}
}
xpos[i+1]<-xdir
ypos[i+1]<-ydir
} return(cbind(xpos,ypos)) } rw<-RW2D(10000)
xmin<-min(rw[,1]) xmax<-max(rw[,1]) ymin<-min(rw[,2]) ymax<-max(rw[,2])
plot(rw[,1],rw[,2],type="l",xlab="x",ylab="y",main="Random Walk Simulation In Two Dimensions",col="green4",xlim=range(xmin:xmax),ylim=range(ymin:ymax))
end<-cbind(rw[10000,1],rw[10000,2]) start<-cbind(0,0)
points(start,pch=4,col="red") points(end,pch=4,col="red")
注意我自己没有 运行 代码,但这应该可以说明这个想法,你应该能够自己修复任何错误。
在 R 中,您如何模拟一个离散的有偏随机游走,其中有一组点被代理吸引?
答案最好包括一个控制粒子扩散率的项。
谢谢!
调整来自 https://stat.ethz.ch/pipermail/r-help/2010-December/261947.html
的代码然后您可以添加一个循环遍历数组的条件函数。如果粒子位置在半径内(或本例中的正方形) - 您可以添加第二个随机事件,如果此为真,粒子将朝该方向多走一步,如果为假 - 则不会。
RW2D<-function(N) { i<-0 xdir<-0 ydir<-0 xpos<-vector() xpos[1]<-xdir ypos<-vector() ypos[1]<-ydir for (i in 1:N-1)
attraction_points <- my.array <- array(1:24, dim=c(2))
{
r<-runif(1)
if(r<=0.25) {xdir<-xdir+1}
if(r>0.25 && r<=0.5) {xdir<-xdir-1}
if(r>0.5 && r<=0.75) {ydir<-ydir +1}
if(r>0.75) {ydir<-ydir-1}
for (j in 1:24){
if ( abs(attraction_points[j,0]-xpos) < 4 ){
if ( abs(attraction_points[j,1]-ypos) < 4 ){
if(runif(1)<=0.5) {xdir<-xdir+ 1*sign(attraction_points[j,0]-xpos)}
if(runif(1)<=0.5) {ydir<-ydir+ 1*sign(attraction_points[j,1]-ypos)}
}
}
}
xpos[i+1]<-xdir
ypos[i+1]<-ydir
} return(cbind(xpos,ypos)) } rw<-RW2D(10000)
xmin<-min(rw[,1]) xmax<-max(rw[,1]) ymin<-min(rw[,2]) ymax<-max(rw[,2])
plot(rw[,1],rw[,2],type="l",xlab="x",ylab="y",main="Random Walk Simulation In Two Dimensions",col="green4",xlim=range(xmin:xmax),ylim=range(ymin:ymax))
end<-cbind(rw[10000,1],rw[10000,2]) start<-cbind(0,0)
points(start,pch=4,col="red") points(end,pch=4,col="red")
注意我自己没有 运行 代码,但这应该可以说明这个想法,你应该能够自己修复任何错误。