R 中的随机游走
Random Walks in R
我想在 R 中转换一些 MATLAB 代码来表示二维和三维随机游走。
我有这个有趣来自教授笔记的 MATLAB 代码,我无法在 MATLAB 中正确运行:
%%TWO-DIMENSIONAL RANDOM WALK%% ALERT: NOT WORKING!
n=100000;
colorstr=['b' 'r' 'g' 'y'];
for k=1:4
z=2.*(rand(2,n)¡0.5)-1; %MATLAB does not understand "¡"
x=[zeros(1,2); cumsum(z')];
col=colorstr(k);
plot(x(:,1),x(:,2),col);
hold on
end grid
和
%%THREE-DIMENSIONAL RANDOM WALK%% WORKING FINE
p=0.5;
n=100;
colorstr=['b' 'r' 'g' 'y'];
for k=1:4
z=2.*(rand(3,n)<=p)-1;
x=[zeros(1,3); cumsum(z')];
col=colorstr(k);
plot3(x(:,1),x(:,2),x(:,3),col);
hold on
end
对于二维r。走路我在 https://stat.ethz.ch/pipermail/r-help/2010-December/261947.html 中发现了一个非常大的代码
但是我想以一种非常简单的方式将上面的代码翻译成 R。我现在所做的是
%%TWO-DIMENSIONAL RANDOM WALK%%
n<-100000
%%%colorstr=c('b','r','g','y') %hesitating
colorstr=c('brgy')
for(i in 1:4){
z=2*(c(runif(n),runif(n))*0.5)-1
print(z)}
x=(array(0,1);cumsum(z^-1))
但是,我认为有必要创建一个函数来输出结果。
谁能帮我完成这个任务?所有的评论和有用的帮助都将得到回报。提前谢谢你。
这里有一个可能的2d随机游走的解法(3d也可以用同样的方法)。
我对 Matlab 不是很流利,所以部分代码我没看懂。
n <- 100
p <- 1/2
set.seed(1) #set a random seed to make example reproducible.
noise2 <- matrix(sample(c(-1, 1), n*2, replace = T, prob = c(1-p, p)), ncol = 2)
noise2 <- rbind(c(0, 0), noise2)
rw2 <- apply(noise2, 2, cumsum)
plot(rw2, type = "l", col = "dodgerblue", xlab = "", ylab = "", lwd = 2)
我模拟噪音不是用runif
而是sample
。这给了我一个长度为 2n 的向量,只包含 -1 和 +1。我将此向量转换为具有两列的矩阵。
之后,我在此矩阵的顶部添加一行,其中包含零。
最后,使用 apply
和 cumsum
我创建了随机游走。 apply 的作用是将函数 cumsum
应用于 noise2
的每一列。
希望对您有所帮助。
我想在 R 中转换一些 MATLAB 代码来表示二维和三维随机游走。
我有这个有趣来自教授笔记的 MATLAB 代码,我无法在 MATLAB 中正确运行:
%%TWO-DIMENSIONAL RANDOM WALK%% ALERT: NOT WORKING!
n=100000;
colorstr=['b' 'r' 'g' 'y'];
for k=1:4
z=2.*(rand(2,n)¡0.5)-1; %MATLAB does not understand "¡"
x=[zeros(1,2); cumsum(z')];
col=colorstr(k);
plot(x(:,1),x(:,2),col);
hold on
end grid
和
%%THREE-DIMENSIONAL RANDOM WALK%% WORKING FINE
p=0.5;
n=100;
colorstr=['b' 'r' 'g' 'y'];
for k=1:4
z=2.*(rand(3,n)<=p)-1;
x=[zeros(1,3); cumsum(z')];
col=colorstr(k);
plot3(x(:,1),x(:,2),x(:,3),col);
hold on
end
对于二维r。走路我在 https://stat.ethz.ch/pipermail/r-help/2010-December/261947.html 中发现了一个非常大的代码 但是我想以一种非常简单的方式将上面的代码翻译成 R。我现在所做的是
%%TWO-DIMENSIONAL RANDOM WALK%%
n<-100000
%%%colorstr=c('b','r','g','y') %hesitating
colorstr=c('brgy')
for(i in 1:4){
z=2*(c(runif(n),runif(n))*0.5)-1
print(z)}
x=(array(0,1);cumsum(z^-1))
但是,我认为有必要创建一个函数来输出结果。 谁能帮我完成这个任务?所有的评论和有用的帮助都将得到回报。提前谢谢你。
这里有一个可能的2d随机游走的解法(3d也可以用同样的方法)。 我对 Matlab 不是很流利,所以部分代码我没看懂。
n <- 100
p <- 1/2
set.seed(1) #set a random seed to make example reproducible.
noise2 <- matrix(sample(c(-1, 1), n*2, replace = T, prob = c(1-p, p)), ncol = 2)
noise2 <- rbind(c(0, 0), noise2)
rw2 <- apply(noise2, 2, cumsum)
plot(rw2, type = "l", col = "dodgerblue", xlab = "", ylab = "", lwd = 2)
我模拟噪音不是用runif
而是sample
。这给了我一个长度为 2n 的向量,只包含 -1 和 +1。我将此向量转换为具有两列的矩阵。
之后,我在此矩阵的顶部添加一行,其中包含零。
最后,使用 apply
和 cumsum
我创建了随机游走。 apply 的作用是将函数 cumsum
应用于 noise2
的每一列。
希望对您有所帮助。