O passeio aleátorio (random walk) é um dos processos estocásticos mais comuns, trata-se de uma cadeia de Markov em tempo discreto. Vamos simular este processo usando python. Para manter as coisas simples, vamos impor as seguintes regras:
Começamos no tempo 0 e iremos até o tempo 100, vamos usar um dado para ditar quando passos iremos dar em tempo t. A partir disso temos: * Se o resultado do dado for 1 ou 2 iremos voltar um passo atras, ou permanecer no 0. * Se o resultado do dado for 3, 4, ou 5 damos um passo a frente. * Se o resultado do dado for 6, jogamos o dado novamente e somamos 6 ao resultado do segundo lançamento, por exemplo: 6 + 2=8, neste caso andaremos 8 passos.
No código abaixo, vamos construir a base para nossa simulação.
# Iniciamos importando as bibliotecas e modulos necessáriosimport numpy as npimport numpy.random as nprimport matplotlib.pyplot as plt# configuração output dos plotsplt.rcParams['figure.figsize'] = [12, 8]plt.rcParams['figure.dpi'] =100# setando uma seed para reprodutibilidadenpr.seed(123)# Inicializando a variável passeio aleatóriopasseio_aleatorio = [0]# aqui defino range(observações) em que observações é a numero total de observações for x inrange(100) : passo = passeio_aleatorio[-1] dado = npr.randint(1,7)if dado <=2: passo =max(0, passo -1)elif dado <=5: passo = passo +1else: passo = passo + npr.randint(1,7) passeio_aleatorio.append(passo)# Plot passeio_aleatorioplt.plot(passeio_aleatorio)# Stringsxlab ='Observações'ylab ='Passos'title ='Passeio Aleatório'# Add axis labelsplt.title(title)plt.xlabel(xlab)plt.ylabel(ylab)plt.show()# Show the plot
Podemos agora, extrapolar o numero de simulações afim de encontrar a distribuição de probabilidade para este caso. Aqui simulamos 10000 vezes os passeios.
O histograma acima mostra em aproximadamente 3000 das 10000 simulações realizadas, o ultimo passo dado no tempo t=100 será em aproximadamente o 75. Com base nos resultados encontrados, é possível encontrar a probabilidade de o ultimo passo ser maior que um valor x, por exemplo: \(P(\text{ passo }>x)= (\text{ número de passos > x })/ (\text{ número de simulações } )\)
#Probabilidade de que o ultimo passo seja maior que 60 é:len(ends[ends>=60])/10000