es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Movimiento browniano / bucle en R

Quiero implementar la función de la representación Wiener en R (ver https://es.wikipedia.org/wiki/Proceso_Wiener#Representación_Wiener) (Quiero implementar la primera fórmula). Al trazar esta función, debería parecerse más a un movimiento browniano estándar cuanto mayor sea la dimensión del vector aleatorio y cuanto menor sea, debería parecer más suave.
He intentado implementarlo, pero creo que hay algún error en el bucle, porque los gráficos no parecen ser muy similares a un movimiento browniano cuando n es alto, incluso llegué a usar 10000, pero no hay suficiente fluctuación dentro de cada gráfico.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Función de Representación de Wiener en R

    Como experto en TI especializado en R, bucles, gráficos y simulación, se te ha asignado la tarea de implementar la función de representación de Wiener en R. El proceso de Wiener es un proceso estocástico que se utiliza con frecuencia en finanzas, física, economía y otros campos. Es un modelo de tiempo continuo que describe los movimientos aleatorios de las partículas en un fluido, y también se puede utilizar para modelar las fluctuaciones del mercado de valores.

    Para comenzar, debemos definir la función en R para implementar la representación de Wiener. Se utiliza la primera fórmula, tal como se muestra en la página de Wikipedia. La función tomará dos argumentos, n y tiempo, donde n es la dimensión del vector aleatorio y tiempo es el número de intervalos de tiempo para los cuales se simula el proceso.

    La implementación de la función se muestra a continuación:

    “`{r}
    brownmotion <- function(n, tiempo=1000){
    W <- rep(0, tiempo)

    Wp1 <- rep(0, tiempo)
    Wp2 <- 0
    X <- seq(0, 1, length.out = tiempo)

    xsi <- rnorm(n)
    for ( i in 1:length(X)){
    for (j in 1:n){
    Wp1[i] <- X[i]xsi[1]
    Wp2 <- Wp2 + xsi[j]
    sin(jX[i]pi)/(j*pi)

      W[i] <- Wp1[i] + sqrt(2)*Wp2
    }
    

    }
    return (W)
    }
    “`

    Desglosemos la función y comprendamos cómo funciona.

    1. La primera línea de la función crea un vector W de tamaño tiempo, que almacenará los valores del proceso de Wiener en cada intervalo de tiempo.
    2. Las tres líneas siguientes crean vectores vacíos Wp1 y Wp2, y un vector X que contiene una secuencia de puntos equiespaciados entre 0 y 1, con una longitud de tiempo.
    3. La siguiente línea genera un vector aleatorio xsi de tamaño n a partir de la distribución normal estándar.
    4. Los dos bucles for anidados calculan los valores de Wp1 y Wp2 utilizando las fórmulas dadas.
    5. Por último, la última línea calcula el valor de W en cada paso de tiempo utilizando la fórmula y los valores de Wp1 y Wp2.

    La función devuelve el vector W, que contiene los valores simulados del proceso de Wiener.

    Cuando se ejecuta la función, debería producir gráficos que se asemejen más a la trayectoria browniana estándar a medida que aumenta la dimensión del vector aleatorio (n). Además, a medida que disminuye la dimensión del vector aleatorio, los gráficos deberían aparecer más suaves.

    Es importante tener en cuenta que la implementación de la función no es perfecta y puede haber un error en algún lugar del bucle. Sin embargo, con un poco de depuración y ajuste, podemos obtener el resultado deseado que se asemeje al proceso browniano estándar.

Comments are closed.