domingo, 5 de enero de 2025

Random walk browniano con R

Un random walk es un proceso estocástico que describe un recorrido formado por una sucesión de pasos aleatorios en algún espacio matemático. Cuando este movimiento es continuo, es decir cuando todas las ubicaciones del espacio son factibles, hablamos de movimiento browniano, estudiado en Física para modelar el comportamiento de partículas suspendidas en un medio líquido o gaseoso. El patrón de movimiento consiste en fluctuaciones aleatorias en la posición de una partícula dentro de un subdominio del fluido, seguido de una reubicación a otro subdominio.

Vamos a realizar una simulación de random walk browniano en 2D modelando los desplazamientos con dos distribuciones continuas, la distribución normal y la uniforme (ambas de media nula). En la representación gráfica, más que en mostrar las rutas del movimiento nos centraremos en acumular sobre cada posible posición el número de veces que la partícula ha estado en ella, construyendo una imagen que muestre la densidad de probabilidad de presencia en cada punto del espacio simulado.

Gracias a las facilidades vectoriales de R nos podemos permitir calcular de manera casi instantánea una ruta aleatoria de nada menos que 10 millones de pasos o iteraciones. La función cumsum() convertirá directamente un listado de valores aleatorios en los correspondientes pares de coordenadas que modelen el paseo.

Aquí tenemos el ploteado básico de ambas simulaciones, la normal y la uniforme respectivamente:




Para la versión animada la generación de cada frame se hace por volcado directo de la matriz de densidades, coloreándola previamente en forma de array RGB.

Puede verse en randomwalknorm.mp4 el resultado del random walk modelando los desplazamientos con la distribución aleatoria normal (hacer clic para Full HD):



Y en randomwalkunif.mp4 el resultado equivalente para la distribución aleatoria uniforme (hacer clic para Full HD):



Esperaba que la distribución normal, al no estar acotada en los extremos, provocara saltos grandes mucho más visibles que la uniforme, pero a la vista está que cuando el número de iteraciones es elevado ambas logran densidades y apariencias bastante similares.

~~~

Dejando de lado las animaciones, calculamos ahora un random walk de 1.000 millones de pasos (100 veces más largo que el anterior) llevando al límite las capacidades de R en mi portátil. Solo la matriz en coma flotante que contiene las coordenadas del camino ocupa 16GB, y cada operación básica sobre ella lleva no menos de 5min de ejecución. El alto nivel de detalle la dota de una apariencia muy fractal (hacer clic para verla en alta resolución de 190Mpx):


~~~

Para terminar un random walk de 50.000 pasos en Excel que puede descargarse de random_walk.xlsx. El paseo parte siempre de (0,0):


Repositorio con el código R: GitHub.

No hay comentarios:

Publicar un comentario

Por claridad del blog, por favor trata de utilizar una sintaxis lo más correcta posible y no abusar del uso de emoticonos, mayúsculas y similares.