* [[ecovirt:roteiro:math:bebadorcmdr|{{:ecovirt:logorcmdr01.png?20|}}]]
* [[ecovirt:roteiro:math:bebador|{{:ecovirt:rlogo.png?20|}}]]
====== Caminhada aleatória: o bêbado e o abismo - Roteiro em R ======
{{:ecovirt:roteiro:math:drunkard_walking.jpg?200 |}}
Imagine um bêbado andando sempre para frente em uma enorme planície, mas que tem um abismo em um dos lados. A cada passo para frente, ele cambaleia um certo número de passos para a direção do abismo ou da planície, com igual probabilidade.
Este é um dos processos Markovianos mais simples, chamado caminhada aleatória ([[http://en.wikipedia.org/wiki/Random_walk|random walk]]) em uma dimensão ((como o bêbado dá sempre um passo adiante, apenas o deslocamento lateral é aleatório, e é o que nos interessa aqui. Usamos os passos para frente como medida de tempo)). Se o bêbado cai no abismo a caminhada acaba (e o bêbado também), uma condição que chamamos de fronteira de absorção (//absorbing boundary//).
===== Bebuns virtuais =====
O que podemos prever deste processo? Vamos soltar alguns bêbados neste mundo virtual. Para isto usaremos uma função em R, cujo código segue abaixo. Copie e cole este código na linha de comando do R.
bebado <- function(n=1,step=1,ciclo=1e5,cont=1e3,x1=NULL){
if(is.null(x1)){
x1 <- sample(1:200,n,replace=TRUE)
}
results <- matrix(NA,nrow=1+ciclo/cont,ncol=n)
results[1,] <- x1
X <- x1
for(i in 2:(1+ciclo/cont)){
for(j in 1:cont){
X[X<=0] <- NA
X <- X +sample(c(step,-1*step),n,replace=T)
}
results[i,] <- X
}
results[is.na(results)] <- 0
time <- seq(0,ciclo,by=cont)
matplot(time,results,type="l", col=rainbow(n),lwd=2, xlab="Passos", ylab="Distância do Abismo")
abline(h=0,lwd=4)
}
Esta função tem quatro argumentos:
* ''n'': Número de bêbados
* ''step'': número de passos para o lado que cada bêbado dá a cada instante de tempo
* ''ciclo'': tempo total da simulação (no caso é o mesmo que o número de passos para frente).
* ''cont'': intervalo de registro dos dados. Este argumento serve para poupar memória, já que guardar todos os passos em simulações longas pode deixar a simulação muito lenta. Mantendo o valor //default// a posição de cada bêbado é registrada a cada 1000 intervalos de tempo.
A função sorteia a posição inicial dos bêbados entre 1 e 200 passos de distância do abismo. Vamos soltar dez bêbados, que cambaleiam 10 passos a cada intervalo, por dez mil intervalos de tempo:
bebado(n=10,step=10,ciclo=1e4,cont=1e3)
Como em todo processo estocástico, os resultados variam a cada realização. Por isso repita a simulação para se assegurar que entendeu os resultados. Você pode fazer isso repetindo muitas vezes com dez bêbados, ou simplesmente aumentando o número de bêbados, já que que são independentes.
==== Efeito do passo ====
O que acontece se deixamos os bêbados um pouco menos cambaleantes? Experimente reduzir para dois os passos laterais:
set.seed(42) # semente de números aleatórios
bebado(n=10,step=2,ciclo=1e4,cont=1e3)
==== Efeito do tempo ====
Estes bêbados que balançam menos estão menos sujeitos a terminar no abismo? Certifique-se disto aumentando o número de intervalos de tempo:
set.seed(42)
bebado(n=10,step=2,ciclo=5e4,cont=1e3)
====Perguntas====
- O bêbado tem igual probabilidade de cair para a direita e para esquerda, portanto ele anda em linha reta, na média. Esta caminhada aleatória equiprovável com fronteira de absorção tem um único desfecho, dado tempo suficiente. Qual é?
- O mesmo modelo pode ser aplicado à dinâmica de populações sob [[ecovirt:roteiro:den_ind:di_edrcmdr|estocasticidade demográfica]]. O que representaria cada um dos parâmetros da simulação neste caso?