Случайные блуждания в R

#r #loops #random-walk

#r #петли #случайное блуждание

Вопрос:

Я хотел бы преобразовать некоторый код MATLAB в R для представления двумерного и трехмерного случайного блуждания.

У меня есть этот интересный код 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. walk я нашел -очень большой код в 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))
 

Тем не менее, я думаю, что необходимо создать функцию только для вывода результатов.
Кто-нибудь может помочь мне с этой задачей? Все комментарии и полезная помощь будут вознаграждены. Заранее благодарю вас.

Ответ №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 .

Надеюсь, это немного поможет. введите описание изображения здесь

Комментарии:

1. Это действительно помогает! Я бы попробовал сейчас с 3D.

2. Отлично. 3d должно быть таким же (за исключением сюжета, конечно :))