viernes, 15 de agosto de 2008

Random Walk LogNormal

Un Random Walk es un paseo aleatorio o camino aleatorio. Se genera con alguna función cuya función de distribución de probabilidad nos permita generar números aleatorios que se apoyan en el valor anteriormente calculado. Podríamos utilizar una simple distribución uniforme (vease otro post anterior), pero en este caso vamos ha utilizar una ditribución LogNormal, o tambíen denominada LogoNormal. En Excel existe una función que genera números que se ajustan precisamente a una distribución Lognormal.
=DISTR.LOG.INV(probabilidad;media;desv_estándar) =DISTR.LOG.INV(0,6;LN(10);0,5)
cuyo resultado es: 11,3504642 Con esta función podríamos crear una serie temporal que se comporte como un Random Walk (paseo aleatorio). Por ejemplo, si en la celda B1 ponemos el primer valor (10) y en la celda B2 ponemos la fórmula:
=DISTR.LOG.INV(ALEATORIO();LN(B1);0,02)
copiando la celda B2 hasta la B1000, obtendríamos una serie temporal de mil datos cuyos incrementos se comportan según una distribución Lognormal. Esto que hemos realizado se podría hacer con una macro como la siguiente.
Código:
Sub serie1()
Dim A() As Double
Dim n
Dim i
n = 1000
ReDim A(n)
Randomize
A(0) = 10
For i = 1 To n
A(i) = Application.WorksheetFunction.LogInv(Rnd, LN(A(i - 1)), 0.02)
Next i
For i = 0 To n
Cells(i + 1, "B") = A(i)
Next i
End Sub

Function LN(x)
LN = Log(x) / Log(Exp(1))
End Function
Una variante de la macro anterior es la siguiente.
Código:
Sub serie2()
Dim A As Variant
Dim n
Dim i
n = 1000
Randomize
Range("B1") = 10
A = [B1:B1001]
For i = 2 To n
A(i, 1) = Application.WorksheetFunction.LogInv(Rnd, LN(A(i - 1, 1)), 0.02)
Next i
[B1:B1001] = A
End Sub

Function LN(x)
LN = Log(x) / Log(Exp(1))
End Function

5 comentarios:

  1. Muchas gracias por el código, me ayudo a trabajar menos, sin embargo, me gustaria q me ayudaras en lo siguiente, mediante el código obtienes una lista de valores aleatorios cuya gráfica representa un camino aleatorio, pregunta ¿Como se puede hacer para obtener la distribución de probabilidad normal? es decir la campana, en función a los valores obtenidos, segun su frecuencia y como construir una tabla de frecuencias. Cuando intento hacerlo mediante Análisis de datos me sale totalmente desordenado, lo q busco es q cada vez q haga funcionar la macro, el gráfico se actualize (ya me salió) y que la gráfica de la distribución tambien. Y además como puedo hacer que la lectura del número de iteraciones sea ingresado por medio de una celda y no fijo en la macro? Muchas Gracias.

    Heinz Roque Loyola
    heinz.doc@gmail.com

    ResponderEliminar
  2. Hola Heinz Guillermo.

    Para contestara a tu comentario he creado un nuevo post en este mismo blog. Se titula: 'Histograma de frecuencias'. Allí puedes ver cómo con datos reales de bolsa se puede hacer un histograma con la función =FRECUENCIA que es una función matricial.

    Para tomar el número de datos de una celda, sustituye en la macro la línea que pone n=1000, por la expresión n=Range("C1") y en la celda C1 pon el valor de n que quieras.

    Saludos.
    www.excelavanzado.com

    ResponderEliminar
  3. Hola. En la misma logica. Si el numero aleatorio a generar tiene correlación con otra variable?

    ResponderEliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  5. Hola Adolfo,
    Lo primero agradecerte el esfuerzo que has hecho para permitirnos tener este canal abierto tan útil para los que estamos desarrollando nuestros conocimientos en Excel.
    Tenía un pregunta sencilla:
    Dado que existe la posibilidad de generar estos Random_Walk utilizando las funciones de Excel2019, ¿no sería suficiente a la hora de generar la serie, o hacerlo en VBA (que desconozco por completo) nos aportará mayor funcionalidad?
    Muchas gracias de nuevo!

    ResponderEliminar