Se puede construir el movimiento browniano como límite de los paseos aleatorios en cuatro sencillos pasos.
-
Crear ruido blanco. Estándar ruido blanco en tiempo discreto es sólo una secuencia $dW_1, dW_2, \ldots, dW_n, \ldots$ de variables aleatorias independientes idénticamente distribuidas de media cero y varianza unitaria. Modela una sucesión de perturbaciones aleatorias en la posición de una "partícula" en una línea. Aquí se muestra un gráfico de una realización de este proceso, con el índice $n$ mostrados en el eje horizontal y los valores realizados de $dW_n$ en el eje vertical. Para hacer este gráfico he utilizado una distribución normal común para el $dW_n.$
-
Escala y desplazamiento. Elección de un incremento de tiempo constante $dt$ para cada paso de esta serie temporal, escalar las perturbaciones por $\sigma\,\sqrt{dt}$ y desplazarlos por $\mu\, dt$ para que la varianza común sea ahora $(\sigma\sqrt{dt})^2 \times 1 = \sigma\, dt$ y la media común es $\mu\, dt.$
El gráfico es el mismo: el único cambio es el reetiquetado del eje vertical. En este ejemplo, el desplazamiento medio por unidad de tiempo es $\mu=-1/2,$ la varianza media por unidad de tiempo es $\sigma^2 = 9/16,$ y el paso de tiempo es $dt=1/8.$ Dibujé una línea horizontal a una altura de $0$ para mostrar el eje x y otra línea horizontal a una altura de $\mu\,dt = -1/16$ para mostrar el valor medio común del proceso.
-
Suma. A partir de $W_0 = 0,$ calcular la suma acumulada de las perturbaciones escaladas y desplazadas. Si quieres una fórmula, será $$W(n\, dt) = \sum_{i=1}^n (\sigma\sqrt{dt}\,dW_i + \mu) = \mu t + \sigma \sqrt{dt}\, \sum_{i=1}^n dW_i.$$ Esta fórmula asigna un valor aleatorio a cada tiempo $dt, 2\,dt, 3\,dt, \ldots, n\,dt, \ldots.$ Es un paseo aleatorio discreto.
-
Interpolar. Interpolación lineal (entre cada "tiempo" sucesivo $n\,dt$ y $(n+1)dt$ ) crea un tiempo continuo proceso aleatorio.
Esta figura muestra los valores interpolados en gris. Sobre ellos se superponen los puntos del paseo aleatorio discreto subyacente (de la figura anterior). Como referencia, la línea que pasa por el valor inicial $(0,0)$ de la pendiente $\mu$ se muestra en rojo.
La última figura muestra un ruta de muestreo de un proceso. En virtud de la interpolación, grafica una función definida sobre los números reales no negativos. Como la función fue determinada por la secuencia original de ruido blanco de las variables aleatorias, es una función aleatoria: es decir, es una realización de un proceso estocástico. Si quieres, también puedes pensar en esta construcción como la creación de una familia de variables aleatorias indexadas por todos los números reales no negativos $t.$
Este camino surgió, en realidad, al "adelgazar" una secuencia más detallada de procesos generados de esta manera (es decir, saltando puntos sistemáticamente después del paso 1). He aquí algunos procesos de esa secuencia, empezando por el anterior.
Es visualmente evidente que estos gráficos convergen hacia algo: este algo es Movimiento Browniano: su proceso Wiener de tiempo continuo. Las explicaciones rigurosas de la convergencia se basan en filtraciones de álgebras sigma, un tema que requeriría demasiado espacio para tratarlo aquí.
Referencia
Steven E. Shreve, Cálculo estocástico para finanzas II: Modelos de tiempo continuo. Springer (2004).
Código
Este R
muestra cómo se han generado y representado los datos de las figuras.
n.times <- 200
t.range <- c(0, 5)
mu <- -0.5
sigma <- 3/4
thin <- 5
set.seed(17)
#
# Create a realization.
#
dt <- diff(t.range) / n.times
X <- data.frame(
n = 0:n.times,
t = 0:n.times * dt,
dW = c(0, rnorm(n.times))
)
X$W <- with(X, cumsum(dW))
X$dW.scaled <- with(X, dW * sqrt(sigma^2 * dt) + mu * dt)
X$W.scaled <- with(X, cumsum(dW.scaled))
plot.all <- function(X, show.points=TRUE, main="Interpolated Discrete Brownian Motion") {
x <- with(X, approxfun(t, W.scaled, method="linear"))
with(X, {
curve(x(t), xlim=range(t), xname="t", lwd=2, col="Gray", main=main)
if(show.points) points(t, W.scaled, pch=21, cex=1, bg="#0040ddc0")
abline(c(0, mu), col="#d0101080", lwd=2)
})
}
#
# Display it.
#
plot.all(X)